Skip to main content

Full text of "Atari PILOT Source Code"

See other formats


- H ® 

I M p lUO^ 

___ .^ ue 

, *•** . BO 

-r 

* ed*^ * 


^bvjo 

lt ACU^ e 58 

oEt " j0 "° '* s v»' E '' 1,0 

, cou^ eN a 



C.\» 

V.o* ' i 

T.rv>"r 

v 


* %E 4 ^ 6 

♦VL 4 °° 

* 

. . A \ 

_ _ 

- »t 4i *L 

ft 


v, **** 





ML 


. , ES-W ^ £ r 2p»P' Ct S> 

*&? % 'Sfegb 


%% 


,.C A-r® 

.r&s^ 


*9*. 

-9 


%% 


- ?e& ■ 

\S 4 £ Vs ' ‘° - *•’* 




* veE#' ■ , » v 


i 


PILOT 


H B STEWART 





. TITLE "PILOT — H. B STEWART" 
PILOT PROGRAM EQUATE FILE 
EDIT #59 — 1 -DECEMBER-80 


OOOO 


DEBUG-0 ; INCLUDE DEBUG CODE IF 1/ DON'T IF O 
; COLLEEN SYSTEM I/O 


E456 


CIO 

= $E456 

E400 


IOVBAS 

= $E400 

E406 


EPUTC 

= $E406 

E414 


SGETC 

= $E4 1 4 

E416 


SPUTC 

= $E4 1 6 

E4 1 A 


SSPEC 

= $E4 1 A 

0010 


IOCBSZ 

= 16 

0000 


IOCBO 

= $00 

0010 


I0CB1 

= I OCBO+ IOCBSZ 

0020 


I0CB2 

= I0CB1+I0CBSZ 

0030 


I0CB3 

= I QCB2+ IOCBSZ 

0040 


I0CB4 

= IOCB 3+ IOCBSZ 

0070 


I0CB7 

= 3*ICCBSZ+I0CB4 

0340 


ICHID 

= $0340 

0341 


ICDNO 

= ICHID+1 

0342 


ICCOM 

= ICDNO+1 

0343 


ICSTA 

= ICCOM+1 

0344 


ICBAL 

= ICSTA+1 

0345 


ICBAH 

= ICBAL+1 

0346 

* 

ICRLL 

= ICBAH+1 

0347 


ICRLH 

= ICRLL+1 

0348 


ICBLL 

= ICRLH+1 

0349 


ICBLH 

= ICBLL+1 

034A 


ICAUX1 

= ICBLH+1 

034B 


ICAUX2 

= ICAUX1+1 

0022 


ICCOMZ 

= $0022 i 

0003 


OPEN 

» $03 ; 

OOOC 


CLOSE 

= $0C ; 

0007 


GETC 

= $07 j 

OOOB 


PUTC 

= $0B ; 

0005 


GETR 

= $05 

0009 


PUTR 

= $09 ; 

0011 


DRAW 

= $11 j 

0012 


FILL 

= $12 ; 

0004 


OREAD 

= $04 

0008 


0 WRIT 

= $08 

0010 


SPLIT 

= $10 i 

0020 


NOCLR 

= $20 i 


COLLEEN VECTOR BASE ADDRESS. 

"E: " PUT CHARACTER. 

"S: " GET CHARACTER. 

"S: " PUT CHARACTER. 

"S: " SPECIAL. 

# OF BYTES PER IOCB. 

CONSOLE I NPUT /OUTPUT. 

(UNUSED). 

GRAPHICS INPUT & OUTPUT. 

LOAD & SAVE I/O. 

IN: & OUT: USE I0CE4 THRU I0CB7. 


IOCB HANDLER I. D. 
DEVICE #. - 

COMMAND BYTE. 

STATUS BYTE. 

BUFFER ADDRESS (LO). 
BUFFER ADDRESS (HI). 
RECORD LENGTH (L.0). 
RECORD LENGTH (HI). 
BUFFER LENGTH (LO). 
BUFFER LENGTH (HI). 
AUX 1 . 

AUX2. 


ZERO PAGE IOCB COMMAND BYTE. 

OPEN COMMAND. 

CLOSE COMMAND. 

GET CHARACTER COMMAND. 

PUT CHARACTER COMMAND. 

GET RECORD COMMAND. 

PUT RECORD COMMAND. 

DRAW LINE.. SPECIAL COMMAND. 
FILL SPECIAL COMMAND. 

OPEN DIRECTION. 

OPEN DIRECTION. 

SPLIT SCREEN OPTION. 

INHIBIT SCREEN CLEAR OPTION. 


001C 

CUP 

= $1C 

; CURSOR 

UP. 

001D 

CDOWN 

= $ 1 D 

; CURSOR 

DOWN. 

001E 

CLEFT 

= $ 1 E 

; CURSOR 

LEFT. 

001F 

CRIGHT 

= $ 1 F 

; CURSOR 

RIGHT. 


PILOT 


H. B. STEWART 


— 


OOIE 

OOIF 


CLEFT 

CRIGHT 


* 1 E 
*1F 


i CURSOR LEFT 
i CURSOR RIGHT 


PILOT — H B STEWART 


009B 

EOL 

= *9B 

007D 

CLEAR 

* *7D 

OOFD 

BELL 

= *FD 


; COLLEEN DATA BASE 

02E7 

MEMLO 

= S02E7 

02E5 

MEMHI 

= *02E5 

OOOE 

APPMHI 

= ♦OOOE 

0011 

BREAK 

= *0011 

02FC 

CH 

= *02FC 

02F0 

CRSINH 

= *02F0 

02FE 

DSPFLG 

= *02FE 

0232 

SSKCTL 

= *0232 

0012 

RTCLOK 

= *0012 

0052 

LMARGN 

= *0052 

0053 

RMARGN 

= *0053 

0055 

COLCRS 

= *0055 

0054 

ROWCRS 

= *0054 

00 5B 

OLDCOL 

= *005B 

00 5 A 

OLDROW 

= *005A 

02FB 

ATACHR 

= *02FB 

02FD 

FILDAT 

= *02FD 

0008 

WARMST 

= *0008 

OOOA 

DOSVEC 

= *000A 

E471 

BYELOC 

= *E47 1 

02C4 

COLORO 

= *02C4 

0270 

PADDLO 

= *0270 

0278 

STICKO 

= *0278 

027C 

PTRIGO 

= *027C 

0284 

STRIGO 

= *0284 

0234 

LPENH 

= *0234 

0235 

LPENV 

= *0235 

0291 

TXTCOL 

= *0291 

02B6 

INVFLG 

= *02B6 


; PILOT 

ERROR CODES 

0080 

NS 

= *80 

0001 

RDYTXT 

= 1 

0081 

EOPERR 

* 1+NS 

0081 

AUTOXT 

= 1+NS 

0002 

CNDERR 

= 2 

0002 

NSTERR 

= 2 

0081 

ENDERR 

= 1+NS 

0002 

JNKERR 

= 2 

0086 

IOERR 

= 6+NS 

0002 

IVCERR 

= 2 

0002 

ATMERR 

= 2 

0002 

IMPERR 

= 2 

0089 

INSERR 

= 9+NS 

0087 

ABTERR 

= 7+NS 

OOOA 

UNDERR 

= 10 

008B 

USOERR 

= 11+NS 

0002 

EXPERR 

= 2 

008C 

INTERR 

= 12+NS 

008D 

LNOERR 

= 13+NS 


i 

14 

OOOF 

OLLERR 

= 15 


i 

16-21 


ATASCII END OF LINE. 
MONITOR CLEAR SCREEN. 
BELL CODE. 


i LOWEST AVAILABLE RAM CWORDD. 
i HIGHEST AVAILABLE RAM CWORD3. 
i APPLICATION MEM HI CWORDD. 

I. BREAK KEY FLAG. 

; KEYBOARD MATRIX CODE INPUT. 
i CURSOR INHIBIT FLAG. 

; CONTROL BYTE DISPLAY FLAG. 

i 60 HZ CLOCK. 

; SCREEN LEFT MARGIN. 

; SCREEN RIGHT MARGIN. 
i SCREEN COLUMN [WORD 1 . 

> SCREEN ROW CBYTED . 

; OLD SCREEN COLUMN. 

; OLD SCREEN ROW. 

i LAST ATASCII CHARACTER OR PLOT POINT. 
; FILL DATA. 

; WARMSTART FLAG (0 IF POWERUP ) . 

; DOS START VECTOR. 

; BLACK BOARD ENTRY POINT. 

; COLOR REGISTER 0 VALUE, 
i PADDLE CONTROLLER 0. 

; JOYSTICK 0. 
i PADDLE TRIGGER 0. 

; JOYSTICK TRIGGER 0. 

; LIGHTPEN HORIZONTAL POSITION. 

; LIGHTPEN VERTICAL POSITION. 

; SPLIT SCREEN TEXT COLUMN, 
i INVERSE VIDEO FLAG FOR KEYBOARD. 


; "NOT A SYNTAX ERROR " FLAG. 

; READY. 

; END OF PROGRAM STORAGE REACHED DURING RUN. 
i EXIT AUTO-INPUT MODE. 

; CONDITION FIELD ERROR (': ' EXPECTED). 

; GRAPHICS SUB-COMMAND NESTING ERROR, 
i USE STACK EMPTY ON END COMMAND. 

; JUNK AT END OF STATEMENT. 

; I/O ERROR. 

; INVALID COMMAND. 

; INVALID ATOM SYNTAX. 

; IMPROPER COMMAND PARAMETER. 

; INSUFFICIENT STORAGE FOR OPERATION. 

; OPERATOR ABORT, 
i UNDEFINED LABEL OPERAND. 

; USE STACK OVERFLOW. 

; EXPRESSION ERROR, 
i INTERNAL BUG ERROR. 

; LINE # OUT OF RANGE. 

IS RESERVED. 

; OVERLENGTH INPUT LINE. 

ARE RESERVED. 


PILOT 


H B STEWART 


0096 

FILERR 

* 22-*-NS 


i 

TOO MANY IN/OUTS 

0017 

SIGNON 

« 23 


i 

POWER-UP SIGN-ON MESSAGE 

0018 

TRCMES 

» 24 


t 

TRACE PREAMBLE 


| 

8 


i 

IS RESERVED. 

0003 

NRCERR 

« 3 ■♦■NS 



NOT RUN MODE COMMAND; IMMEDIATE ONLY. 

0084 

DIVERR 

« 4 •♦■NS 



DIVIDE BY ZERO. 

0083 

SCNERR 

« 5 ■♦■NS 



SCREEN MODE CONFLICT. 


i ATOM 

IDENTIFIER CODES 

(PRODUCED BY 'ATOM') 

0001 

NULL 

* 1 


» 

NULL ATOM. 

0002 

NUM 

» 2 


i 

NUMERIC CONSTANT. 

0004 

NVAR 

m 4 


i 

NUMERIC VARIABLE OR POINTER TO WORD. 

0008 

SVAR 

* 8 



STRING VARIABLE. 

0010 

USVAR 

* 16 



UNDEFINED STRING VARIABLE. 

0020 

TEXT 

= 32 



TEXT. 

0040 

OPR 

= 64 



OPERATOR. 

0080 

BPTR 

■ 128 



POINTER TO BYTE. 


; EDGE 

DETECT STATUS 

BITS 


0008 

ELEFT 

= 8 



LEFT EDGE. 

0004 

ERIGHT 

= 4 



RIGHT EDGE. 

0002 

EBOTOM 

= 2 



BOTTOM EDGE. 

0001 

ETOP 

= 1 



TOP EDGE. 


; PILOT 

CONFIGURATION 

PARAMETERS. 

0010 

USTKSZ 

= 16 



8 LEVELS IN USE STACK. 

0002 

ELEVEL 

= 2 



# OF EXPRESSION STACK () LEVELS. 

OOOE 

ESTKSZ 

= 4*ELEVEL+6 



EXPRESSION STACK SIZE. 

OOFE 

ACCLNG 

= 254 



ACCEPT BUFFER LENGTH. 

OOFE 

TEXLNG 

= 254 



TEXT EXPRESSION BUFFER LENGTH. 

007A 

LINLNG 

= 122 



COMMAND/ACCEPT INPUT LINE LENGTH. 

270F 

MAXLN 

_ 9999 



MAXIMUM PROGRAM LINE NUMBER. 

0004 

AUREGS 

= 4 



4 AUDIO REGISTERS. 

0007 

SCNMOD 

= 7 



4 COLOR/ 160 * 96. 

OOOF 

DNS I Z E 

= 15 



DEVICE/FILENAME MAXIMUM LENGTH. 

0050 

XC 

= 80 



GRAPHICS SCREEN CENTER X AXIS. 

0030 

YC 

= 48 



GRAPHICS SCREEN CENTER Y AXIS. 

0028 

TCOL 

= 40 



TEXT SCREEN # OF COLUMNS. 

0018 

TROW 

= 24 



TEXT SCREEN # OF ROWS. 


; COLLEEN HARDWARE EQUATES 


D200 

AUDF1 

= 

$D200 

D201 

AUDC1 

= 

AUDF1+1 

D20F 

SKCTL 

= 

$D20F 

D20F 

SKSTAT 

= 

$D20F 

D208 

AUDCTL 

ss 

$D208 

D302 

PACTL 

= 

$D302 

00B4 

CASSON 

= 

*34+$80 

OOBC 

CASSOF 

== 

$3C+*80 

D20A 

PKYRND 

=r 

$D20A 


AUDIO #1 FREQUENCY DIVIDER. 
AUDIO #1 TYPE/VOLUME. 

SERIAL PORT CONTROL. 

SERIAL PORT STATUS. 

AUDIO CONTROL REGISTER. 

P I A CASSETTE CONTROL. 
CASSETTE ON. 

CASSETTE OFF. 

POKEY RANDOM NUMBER. 


; MISCELLANEOUS 

= 4 


0004 


PCUP 


PEN COLOR 


'UP '. 


PILOT 


H. B. STEWART 


> $ 

i PILOT DATA BASE 


0080 

*=$0080 

DTAB 

=* 

0080 

I NLN 

# = #•4-4 

0084 

NXTLN 

*=*+2 

0086 

AC0LR2 

* = #•4-1 

0087 

AC0LR1 

#=#+ 1 

0088 

ACLN 

*=*+4 

008C 

TELN 

#=#-4-4 

0090 

USTKP 

#=#+ 1 

0091 

ESTKP 

*=#+1 

0092 

EXEC 

#=#+i 

0093 

EXPSTK 

*=#+ESTKSZ 

OOA 1 

TEMP 

*=#+6 

00A7 

TEMP2 

#=#+4 

OOAB 

XTEMP 


OOAE 

S1L 

#=#+2 

OOBO 

S1H 

*=#+2 

00B2 

S2L 

*=#+2 

00B4 

S2H 

#=#+2 


00B6 POINT *=*+2 

00B8 NUMBER *=*+2 


OOBA 

OOBE 

00C2 

00C6 

OOCA 

OOCE 



#=*+4 

* = #■ 4-4 

#=#+4 

# = #•4-4 

#=#+4 

*=#+4 


00D2 

MEMA 

#=#-t-2 

00D4 

MEMB 

#=*+2 

00D6 

l MSP 

#=#+2 

00D8 

\ MDP 

#=#+2 

OODA 

MBC 

#=*+2 


OODC 


LINENO 

#=#+2 

OODE 


LS 

#=*+2 

OOEO 


LE 

*=#+2 

00E2 


MFDEL 


00E2 


ACC 

*=#+2 

00E4 


I0STAT 

#=*+2 


00E6 

00E9 

OOEC 

OOEF 

00F2 

00F4 

OOFS 

00F9 



GXNEW 

GYNEW 

GX 

GY 

THETA 

GNUMB 

XXXX 

ALINE 


#=#+3 

#=#+3 

#=#+3 

#=#+3 
#=#+2 
•#-# + 4 
#=#+ 1 
*=#+2 


BASE ADDRESS FOR DXXXI UTILITIES b OTHERS. 


INPUT LINE POINTER. 

NEXT LINE POINTER (RUN MODE). 

AUTO-NUMBER COLOR REGISTER 2. 

AUTO-NUMBER COLOR REGISTER 1. 

ACCEPT LINE POINTER. 

TEXT EXPRESSION RESULT POINTER. 

; USE STACK POINTER (0 - N*2>. 
i EXPRESSION STACK POINTER. 

i 0 = SYNTAX CHECKi ELSE EXECUTE (FOR X-ROUTINES). 
; EXPRESSION STACK. 

; TEMPORARY STORAGE FOR BOTTOM LEVEL ROUTINES, 
i MORE TEMPORARY STORAGE. 

; TEMPORARY STORAGE FOR X-ROUTINES. 

; DYNAMIC STORAGE AREA LIMITS. 


i 'ATOM' RETURN PARAMETER ?< 'PSF' WORK POINTER. 

; 'ATOM' RETURN PARAMETER & 'PSTOP ' ERROR # SAVE. 


STRING PACKAGE LIST POINTER. 

NAME POINTER. 

DATA POINTER. 

PATTERN MATCH POINTER. 

SOURCE POINTER (BOTTOM LEVEL). 

PATTERN POINTER (BOTTOM LEVEL). OYerlcO 


MEMORY MANAGEMENT ADDRESS PARAMETER. 

BYTE COUNT PARAMETER. 
SOURCE POINTER. 

DESTINATION POINTER., 

WORKING BYTE COUNT. 


STATEMENT LINE # (MUST BE IN ZERO PAGE). 

' XLIST ' START LINE #, ' XGRAPH ' ITERATION COUNT & 'SCNDEV'. 

'XL I ST' END LINE #, 'GMOVE' REGISTER SAVE & 'SCNDEV'. 
MATCH FIELD DELIMITER (', ' OR ' « ' • 

WORKING NUMERIC ACCUMULATOR. 

COLLEEN I/O ERROR STATUS C WORD] . 

GRAPHICS NEXT POSITION ( LSB, MSB, FRACT ION ) . 

GRAPHICS X POSITION ( LSBi MSB, FRACTION ) . 

GRAPHICS Y POSITION ( LSB, MSB, FRACTION ) . 

POLAR ANGLE. 

GRAPHICS WORKING STORAGE. & 'XACCPT' TEMPORARY 
'SCNDEV' 8t 'PSTOP' USE. 

AUTO- INPUT & RENUMBER LINE NUMBER. 


PILOT 


H B. STEWART 


OOF 8 

AINC 

*■*♦2 

i AUTO-INPUT & RENUMBER LINE INCREMENT. 

OOFD 

MATCHF 

**•+ 1 

; MATCH RESULT (0 * FALSE, ELSE MATCH FIELD #>. 

OOFE 

EXECF 


i CONDITION RESULT (0 - NO EXECUTE, ELSE EXECUTE) 

OOFF 

RUN 

i 

i 0 - IMMEDIATE MODE, ELSE RUN MODE. 


i REDEFINES OF STRING 

& MEM MNGMT 

VARIABLES FOR GRAPHICS USE 

OOBE 

GX1 

* NP 

l WORKING 

X C3 BYTES! . 

OOC1 

GY 1 

* GX 1*3 

i 

Y C3 BYTES!. 

00C4 

GX2 

» GY1+3 

i 

X 13 BYTES!. 

00C7 

GY2 

* GX2+3 

| 

Y C3 BYTES!. 

OOCA 

DELX 

* GY2+3 

i 

DELTA X C2 BYTES!. 

OOCC 

DELY 

- DELX+2 

1 

Y C2 BYTES!. 

OOCE 

GACC 

* DELY+2 

i WORKING 

ACCUMULATOR C4 BYTES!. 

00D2 

GTEMP 

* GACC+4 

i 

TEMP C4 BYTES!. 

00D6 

GTEMP2 

* GTEMP -*-4 

i 

TEMP C 4 BYTES!. 


*=*0500 


0500 

IOEDIS 

*=*+2 i 

0502 

X JUMP 

i 

*=#■+3 ; 

0505 

GJUMP 


0508 

S JUMP 

*=*+3 i 

050B 

USESTK 

*=*+USTKSZ ; 

051B 

VAR TAB 

*=*+52 ; 

054F 

CTABXR 

•*=*+2 ; 

0551 

DIGIT 

*=*+1 

0552 

SAVYR 

*=*+1 ; 

0553 

PEN 

*=#+1 ; 

0554 

GRFLAG 

*=*+1 ; 

0555 

AUDI OR 

*=*+AUREGS+AUREGS 

055D 

AUX 1 

*=#+1 ; 

055E 

AUX2 

*- = ■»•+• 1 ; 

*=*+1 ; 

0560 

OPNBUF 

*=*+DNSI ZE+1 ; 

0570 

CDEST 

•*=*.+2 ; 

0572 

LOADFG 

•* = * + 1 ) 

0573 

MATCHX 

*=*+2 

0575 

TRACE 

*=*+1 

0576 

AUTOIN 



I/O ERROR STOP DISABLE. 

EXTRA BYTE TO PROTECT AGAINST WORD POKE. 

FIRST BYTE * JMP COMMAND ( X-ROUT I NES ) . 

FIRST BYTE = JMP COMMAND (G-ROUTINES) . 

FIRST BYTE = JMP COMMAND ('SOP'). 

USE STACK. 

VARIABLE TABLE (26 ENTRIES FOR A-Z). 

COMMAND TABLE INDEX ( 'CMATCH ' RETURN ARG ) . 

(FIRST BYTE IS UNUSED. ) 

'MLOOP ' SAVE Y REGISTER. 

GRAPHICS PEN SELECT. 

GRAPHICS MODE FLAG <0=N0T GRAPHICS, ELSE GRAPHICS) 
; AUDIO VARIABLE POINTERS. 

I/O AUX1 OVERRIDE BYTE. 

I/O AUX2 OVERRIDE BYTE. 

'QPNBUF'-l USED BY 'SCNDEV'. 

DEVICE NAME BUFFER FOR OPEN. 

'CHOT' DESTINATION IDENTIFIER & SAVE BYTE. 

0 IF MOT LOADING, ELSE LOADING. 

'XMATCH' FIELD INDEX VALUES. 

RUN-TIME TRACE FLAG (TRACE IF O 0). 

AUTO-INPUT FLAG (ACTIVE IF <> 0). 


0577 

0676 

06F1 

OOOE 


TEXBUF *=*-*-TEXLNG+l 
COMBUF *=*+LINLNG+l 
GSMODE *=*+ 1 
SPARES = $700-* 


TEXT EXPRESSION BUFFER. 

COMMAND INPUT BUFFER. 

GRAPHICS SCREEN MODE. 

*** THIS HAD BETTER BE POSITIVE *** 


PILOT 


H B STEWART 


i NOTE ALL SOURCE LINES OF THE FORM SHOWN BELOW ARE REDUNDANT > THE 
i LINE IS LEFT THERE TO SHOW THE ASSUMPTION THE LINE WOULD NORMALLY 
, BE ASSEMBLED EXCEPT FOR THIS DAMN REQUIREMENT TO SCRUNCH THE CODE * 

i *S* LDA #0 i COMMENT. 

i NOTE THE USE OF THE TERM * ( BRA ) ' IN A COMMENT INDICATES THAT THE 
i PARTICULAR BRANCH INSTRUCTIONS USED WILL ALWAYS BRANCH IN THE 
i PARTICULAR CIRCUMSTANCES THE BRANCH IS SUPPOSED TO BE A TWO BYTE 
< JUMP 


i POWER-UP ROUTINE AND INITIALIZATION 


. IF DEBUG 

**♦9800 

. END IF 

IF DEBUG- 1 

♦“♦AOOO 

. ENDIF 


CHECK CONTENT OF *9FFC; MUST NOT BE 00 
CARTRIDGE BODY 


AOOO 

A9 

06 


INI T 

LDA 

#EPUTC-IOVBAS 

j 

ESTABLISH 'CHOT' DESTINATION AS 'E: 

A002 

8D 

70 

05 


STA 

CDEST 



A005 

AS 

08 



LDA 

WARMST 

l 

WARM START? 

A007 

DO 

40 



BNE 

IN 10 1 5 

I 

YES. 

A009 

A2 

80 



LDX 

#♦80 

I 

NO — CLEAR UPPER HALF OF PAGE ZERO. 





i *S* 

LDA 

#0 



AOOB 

95 

00 


INI010 

STA 

0, X 



AOOD 

E8 




I NX 



CONTINUE TILL PAGE WRAP POINT. 

AOOE 

DO 

FB 



BNE 

IN 1010 

i 

AO 10 

A9 

4C 



LDA 

#♦40 

i 

PUT JMP OP-CODE IN JUMP VECTORS. 

AO 12 

8D 

02 

05 


STA 

X JUMP-*-0 



A01 5 

8D 

05 

05 


STA 

GJUMP+O 



AO 18 

8D 

08 

05 


STA 

SJUMP+O 



AO IB 

A9 

16 



LDA 

#♦16 

i 

AUTO-NUMBER SCREEN = DARK YELLOW. 

AO ID 

85 

86 



STA 

AC0LR2 


AUTO-NUMBER LETTERS = BLACK. 


i *S* 

LDA 

#♦00 

i 





i *s* 

STA 

AC0LR1 



AO IF 

A9 

17 



LDA 

#SIGNON 

i 

GENERATE SIGN-ON MESSAGE. 

A021 

20 

12 

BF 


JSR 

MESSOT 



A024 

AD 

E7 

02 


LDA 

MEMLO 

i 

ESTABLISH MEMORY LIMITS FOR ALLOCATION 

A027 

85 

88 



STA 

ACLN 

i 

ACCEPT BUFFER . . . 

A029 

85 

AE 



STA 

S1L 

l 

... & PROGRAM STORAGE AREA. 

A02B 

AD 

E8 

02 


LDA 

MEMLO+1 



A02E 

85 

89 



STA 

ACLN+ 1 



A030 

18 




CLC 



NEXT PAGE. 

A031 

69 

01 



ADC 

#1 

i 

A033 

85 

AF 



STA 

S1L+1 



A035 

20 

FF 

A9 


JSR 

CLRPRG 



A038 

AD 

E5 

02 


LDA 

MEMHI 




PILOT 


H. B. STEWART 


A03B 85 B4 
A030 85 B2 
A03F AD E6 02 
A042 85 B 5 
A044 85 B3 


STA S2H 

STA S2L 

LDA MEMHI+1 

STA S2H+1 

STA S2L+1 


A046 20 3B B8 


JSR ZERVAR 


ZERO THE NUMERIC VARIABLES. 


A049 

A04B 

A04E 

A051 

A054 

A057 

A05A 


A9 00 
8D 54 05 
8D 72 05 
8D 75 05 
8D 76 05 
8D 5D 05 
8D 5E 05 


INI015 


LDA 

STA 

STA 

STA 

STA 

STA 

STA 


A05D 85 FD 

STA 

A05F A9 07 

/ LDA 

A06 1 8D FI 06 

STA 

A064 20 2 F B8 

JSR 

A067 A9 77 

LDA 

A069 85 8C 

STA 

A06B A9 05 

LDA 

A06D 85 8 D 

STA 

A06F 20 54 B2 

JSR 

A072 20 7F BA 

JSR 


#0 

ORFLAO 

LQADFG 

TRACE 

AUTOIN 

AUX 1 

AUX2 

MATCHF 


i ZERO 


GRAPHICS SCREEN FLAG 
LOAD FLAG . . . 

TRACE FLAG . . . 
AUTO-INPUT FLAG . . . 
I/O AUX 1 . . . 

I/O AUX2 . . . 

S< MATCH RESULT. 


#SCNMOD 
GSMODE 

NULACC 

#TEXBUF 

TELN 

#TEXBUF/256 

TELN+1 


SETUP DEFAULT GRAPHICS SCREEN MODE 


D 


SET ACCEPT BUFFER TO NULL. 


SETUP TEXT EXPRESSION BUFFER POINTER. 






REMDEV 

GEX050 




REMOVE DEVICE ASSIGNMENTS FROM STRING LIST 
RECAPTURE GRAPHICS REGION IF NECESSARY. 




A075 4C 33 BF 


JMP 


RDYMES 


; GENERATE "READY" MESSAGE & RETURN. 


PILOT 


H B STEWART 


A078 

A07A 

A07B 


A07E 

A080 

A082 

A085 

A088 

A08B 

A08D 

A090 

A092 

A095 

A097 

A099 

A09C 


A09F 
AOA1 
A0A3 
AO A 5 

A0A7 

AOAA 

AOAD 


AOAF 

A0B2 

A0B4 

A0B7 

A0B9 

AOBB 

AOBE 

AOCO 

A0C2 

A0C4 


A0C6 

A0C8 

AOCB 


A2 FF 
9A 

20 00 AO 


* MAIN LOOP FOR 


MLE 


LDX 

TXS 


c 


JSR 


i *** EXTERNAL 


PILOT INTERPRETER. 
#*FF t 

INI T J__ 

ENTRY POINT *#* 


INITIALIZE STACK POINTER 


INITIALIZE REST OF ENVIRONMENT 


A9 00 
85 FF 
8D FE 02 
8D B6 02 
8D 00 05 


MLRES LDA #0 

STA RUN 

STA DSPFLO 

STA INVFLG 

STA IOEDIS 


RESET . . . 

. . . RUN FLAG . . . 

. . . DISPLAY FLAG . . . 

. . . INVERT VIDEO FLAG 
. . . *< ERROR STOP DISABLE FLAG. 


A9 DC 
8D 03 
A9 A6 
8D 04 
85 FE 


05 

05 


LDA 

#XTYPE 

l 

STA 

XJUMP+1 


LDA 

#XTYPE/256 


STA 

XJUMP+2 


STA 

EXECF 

j 


MAKE ' COMMAND * 'T: 
CONDITION FLAG » TRUE. 


A9 BC 
8D 02 D3 
20 72 B8 


LDA 

#C ASSOF 

j 

STA 

PACTL 


JSR 

AUDCLR 

i 


CASSETTE MOTOR OFF 
CLEAR AUDIO REGISTERS 


i *** EXTERNAL ENTRY POINT *** 


A9 76 
85 80 
A9 06 
85 81 


MLLOAD LDA 

#COMBUF 

STA 

INLN 

LDA 

#C0MBUF/256 

STA 

INLN+1 


RE-ESTABLISH CONSOLE BUFFER INPUT. 


20 C8 BE 
20 ID A2 
DO 3A 


MLOOP 

JSR 

TONES 


JSR 

GETCOM 


BNE 

ML0089 


i GENERATE AUDIO, 
i GET A COMMAND INPUT. 
; ERROR <SKIP BRANCH). 


; NOTE : 

i 

i 


THE Y REGISTER IS ASSUMED TO CONTAIN THE INDEX TO I NLN ' 
THROUGHOUT THIS ROUTINE. ALL CALLED ROUTINES WILL EE 
RESPONSIBLE FOR MAINTAINING ITS INTEGRITY. 


AD 

76 

05 

LDA 

AUTOIN 

DO 

3A 


BNE 

ML0100 

20 

Cl 

B7 

JSR 

SCNLBL 

FO 

07 


BEQ 

ML0030 

B 1 

80 


LDA 

( INLN), Y 

20 

7A 

B7 

JSR 

CNUMBR 

90 

39 


BCC 

ML01 10 

84 

82 


ML0030 STY 

INLN+2 

A5 

FF 


LDA 

RUN 

DO 

OD 


BNE 

ML0080 


i UN-NUMBERED LINE — IMMEDIATE 


; AUTO- INPUT MODE? 
i YES. 

i SCAN OVER LABEL IF PRESENT, 
i YES — SAW A VALID LABEL. 

; CHECK FOR LINE NUMBER. 

; YES — EDIT MODE. 

j SAVE INDEX TO SOURCE CODE, 
i SEE IF RUN OR IMMEDIATE MODE. 

; RUN MODE — NO NEED TO SYNTAX CHECK. 

EXECUTION 


A2 00 
20 A6 A2 
DO 1C 


LDX #CTABI-CTAB 

JSR SYCMND 

BNE ML0089 


i SETUP FOR IMMEDIATE MODE COMMANDS. 

; IMMEDIATE MODE — SYNTAX CHECK CODE, 
i ERROR — DON'T EXECUTE THE COMMAND. 


AOCD A4 82 

LDY 

INLN+2 

j 

RESTORE SOURCE CODE POINTER. 

AOCF A2 00 

LDX 

HCTAB I-CTAB 

« 

SETUP FOR IMMEDIATE MODE COMMANDS. 

AODl FO 13 

BEQ 

ML 0085 

i 

*S* (BRA). 

A0D3 AD 73 03 

ML 0080 LDA 

TRACE 

j 

TRACE EXECUTION? 

A0D6 FO OC 

BEQ 

ML0082 

I 

NO. 

A0D8 A9 18 

LDA 

#TRCMES 

i 

YES — PRINT TRACE LINE HEADER. 

AODA 20 12 BF 

JSR 

MESSOT 



AODD AO 00 

LDY 

# I NLN-DT AB 

f 

PRINT SOURCE STATEMENT. 

AODF 20 09 B8 

JSR 

PSF 



A0E2 A4 82 

LDY 

INLN+2 



A0E4 A2 IF 

ML0082 LDX 

#CTABR-CTAB 

i 

SETUP FOR RUN MODE COMMANDS. 

A0E6 20 AA A2 

ML0085 JSR 

EXCMND 

i 

EXECUTE THE COMMAND. 

A0E9 DO 30 

ML0089 BNE 

ML0155 

i 

RUN-TIME ERROR (SKIP BRANCH POINT). 

AOEB 4C A7 AO 

JMP 

MLOOP 

i 

GET NEXT COMMAND. 


i AUTO-INPUT 

MODE — SUPPLY THE LINE NUMBER. 

AO EE A3 F9 

ML0100 LDA 

ALINE 

9 

SUPPLY THE LINE NUMBER. 

AOFO 85 B8 

STA 

NUMBER 



A0F2 A 5 FA 

LDA 

ALINE+1 



A0F4 85 B9 

STA 

NUMBER+ 1 



A0F6 4C FC AO 

JMP 

ML01 12 



• 

; NUMBERED LINE INPUT — EDIT 

MODE. 

A0F9 20 E 8 A4 

ML0110 JSR 

ATOM 

i 

CONVERT LINE NUMBER TO BINARY IN 'NUMBER' 

AOFC 20 FA B7 

ML0112 JSR 

SLB 

# 

SKIP BLANKS BETWEEN LINE # & STATEMENT. 

A OFF 84 82 

STY 

INLN+2 

j 

SAVE INPUT LINE POINTER. 

A101 A2 38 

LDX 

#NUMBER~DT AB 



A103 20 63 AF 

JSR 

CHKLN 

i 

CHECK LINE # FOR RANGE. 

A106 BO 61 

BCS 

ML0200 

i 

OUT OF RANGE. 

A108 A9 00 

LDA 

#0 

j 

CLEAR USE STACK ON INSERT/DELETE. 

A10A 85 90 

STA 

USTKP 



A10C A5 B9 

LDA 

NUMBER +1 

9 

SAVE LINE NUMBER . . . 

A10E 85 DC 

STA 

LINENO 

i 

... IN INVERTED FORM (STRING NAME). 

A110 A5 B8 

LDA 

NUMBER 



A112 85 DD 

STA 

LINENO+1 



A114 A4 82 

LDY 

INLN+2 

9 

RESTORE INPUT LINE INDEX. 

A116 20 Cl B7 

JSR 

SCNLBL 

9 

SKIP OVER LABEL IF PRESENT. 

A119 FO 19 

BEQ 

ML0150 

i 

LABEL FOUND. 

AUB B 1 80 

LDA 

( I NLN ) / Y 

9 

CHECK FOR NULL STATEMENT. 

A11D C9 9B 

CMP 

#EOL 



A11F DO 13 

BNE 

ML0150 

9 

NON-NULL — STATEMENT IS TO BE ENTERED. 

A121 AD 76 05 

LDA 

AUTOIN 

9 

AUTO-INPUT MODE? 

A124 FO 08 

BEQ 

ML0140 

9 

NO. 

A126 20 59 A1 

JSR 

LVAUTO 

9 

LEAVE AUTO-INPUT MODE. 



H. B. STEWART 


PILOT — H. B. STEWART 


A 129 A9 81 


LDA 

A12B 4C E9 A1 


JMP 

A12E 20 06 A2 

ML0140 

JSR 

A131 4C A7 AO 


JMP 

A 134 A4 82 

ML0150 

LDY 

A 136 A2 00 


LDX 

A 138 20 A6 A2 


JSR 

A13B DO 2F 

MLQ155 

BNE 

A13D AD 50 05 


LDA 

A 140 C9 IF 


CMP 

A1 42* BO 04 


BCS 

A144 A9 83 


LDA 

A146 DO 24 


BNE 

A 148 A4 82 

ML0160 

LDY 

A14A 20 F2 A1 


JSR 

A14D DO ID 


BNE 

A14F A2 79 


LDX 

A151 AO 7B 


LDY 

A153 20 80 B5 


JSR 

A156 4C A7 AO 


JMP 

A159 A2 00 

LVAUTO 

LDX 

A15B 8E 76 05 


STX 

A15E A2 94 


LDX 

A 160 8E C6 02 

i 

STX 

A163 A2 CA 


LDX 

A165 8E C 5 02 


STX 

A 168 60 

PUP 

RTS 

A 169 20 59 A1 

ML0200 

JSR 


#AUTOXT 

MLQ985 

LDELET 

MLOOP 

INLN+2 
#CTAB I-CTAB 
SVCMND 
ML0900 

CTABXR+1 

#CTABR~CTAB 

ML0160 

#NRCERR 

ML0900 

INLN+2 

LINSRT 

ML0900 

#ALINE-DTAB 

#AINC-DTAB 

DADDI 

MLOOP 

#0 

AUTOIN 

#$94 

C0L0R0+2 

#$CA 

COLORO+1 


LVAUTO 


GENERATE MESSAGE AS WE LEAVE. 


YES — DELETE NUMBERED LINE. 


RESTORE INPUT LINE POINTER. 

SETUP FOR RUN MODE COMMANDS. 

SYNTAX CHECK THE STATEMENT. 

SYNTAX ERROR (SKIP BRANCH POINT). 

SEE IF COMMAND FOUND IS IMMEDIATE ONLY. 

NO. 

YES — ERROR. 

(BRA). 

RESTORE INPUT LINE POINTER. 

INSERT THE NEW LINE. 

NO ROOM FOR NEW LINE. 

INCREMENT AUTO-INPUT LINE #. 

(EVEN IF NOT IN AUTO-INPUT MODE). 


GET NEXT COMMAND. 

RESET AUTO- INPUT MODE. 


RESTORE NORMAL SCREEN COLOR. 


*** ANY OLD 'RTS ' WILL DO FOR 'PUP' ***. 


LEAVE AUTO-INPUT MODE &< FALL INTO 'PSTOP ' 


PILOT H B STEWART 


♦ SYNTAX /RUN-TIME ERROR PROCESSOR 
i ••• EXTERNAL ENTRY POINT *** 
i A - ERROR CODE 

i Y - INDEX TO ERROR IN STATEMENT. 


AI6C 


ML 0900 




A16C A2 FF 


PSTOP 

LDX 

#*FF 

l 

RE-INIT STACK POINTER. 

A16E 9A 



TXS 




A16F BE FE 

02 


STX 

DSPFLG 

» 

SET DISPLAY FLAG 

A 1 72 8C 52 

05 


STY 

SAVYR 

i 

SAVE INDEX TO ERROR. 

Al 75 85 B8 



STA 

NUMBER 

# 

SAVE ERROR NUMBER 

A177 A9 06 



LDA 

#EPUTC— I OVBAS 

i 

RE-ESTABLISH 'E ' AS 'CHOT' OUTPUT. 

A179 8D 70 

05 


STA 

CDEST 



A17C 20 60 

B8 


JSR 

NEWLIN 



A 1 7F A5 FF 



LDA 

RUN 


IF IMMEDIATE . . . 

A181 05 83 



ORA 

INLN+3 


... & EMPTY INPUT LINE . . . 

A 183 FO 6A 



BEQ 

ML0990 


... THEN IGNORE ERROR (BREAK). 

A185 A5 38 



LDA 

NUMBER 



A187 C9 81 



CMP 

#EOPERR 

i 

SEE IF ERROR IS END OF PROGRAM. 

A 189 FO 5E 



BEQ 

ML0985 

# 

YES — NO STATEMENT TO PRINT. 

A18B A8 



TAY 


i 

(SET CC). 

A18C 30 11 



BMI 

ML0947 

i 

YES — NO HIGHLIGHTED CHARACTER. 

A18E AC 52 05 


LDY 

SAVYR 

9 

HIGHLIGHT THE ERROR CHARACTER. 

A191 B 1 80 



LDA 

( I NLN ) > Y 



A 193 85 F8 



STA 

XXXX 

9 

SAVE FOR LATER RESTORATION. 

A195 C9 9B 



CMP 

#EOL 



A197 DO 02 



BNE 

ML0945 



A 199 A9 20 



LDA 

# ' 

9 

REPLACE EOL WITH BLANK. 

A19B 49 80 


ML0945 

EOR 

#$80 

9 

INVERT COLOR. 

A19D 91 80 



STA 

< I NLN ) / Y 



A19F A5 FF 


ML0947 

LDA 

RUN 

i 

SEE IF RUN OR IMMEDIATE MODE. 

A1A1 FO 08 



BEQ 

ML0950 

9 

IMMEDIATE. 

A1A3 AO 00 



LDY 

#INLN-DTAB 



A1A5 20 09 B8 



JSR 

PSF 

i 

RUN — PRINT STORAGE FORMAT. 

A1A8 4C B2 A1 



JMP 

MLQ960 



A1AB 


ML095O 







; -a-S# 

LDA 

#0 

9 

*** OR DON'T USE 'I NLN '+2 AS TEMP STORE 

A1AB 85 82 



STA 

INLN+2 



A1AD A2 00 



LDX 

#INLN-DTAB 

i 

IMMEDIATE — PRINT INPUT LINE. 

A1AF 20 53 B 1 



JSR 

PRTSTG 



A1B2 A5 B8 


ML096O 

LDA 

NUMBER 

9 

WAS THERE A HIGHLIGHTED CHARACTER? 

A1B4 30 0 E 



BMI 

ML0963 

9 

NO. 

A1B6 AC 52 05 



LDY 

SAVYR 

9 

RESTORE ORIGINAL CHARACTER. 

A1B9 A5 F8 



LDA 

XXXX 



A1BB 91 80 



STA 

(INLN), Y 




PILOT 


H. B. 


STEWART 


PILOT 


H B STEWART 


A1BD C9 9B 


CMP 

#EQL 

i WAS IT THE EOL? 

A1BF DO 03 


BNE 

ML0963 

i NO. 

A tC 1 20 6F AF 


JSR 

CHOT 

i YES — DO IT NOW. 

A1C4 A9 08 

ML0963 

LDA 

#8 

i PREFIX MESSAGE WITH '***'. 

A1C6 20 12 BF 


JSR 

MESSOT 


A1C9 A5 B8 


LDA 

NUMBER 


A1CB C9 86 


CMP 

#IOERR 

i I/O ERROR? 

A1CD DO OA 


BNE 

ML0981 

1 NO. 

A1CF A4 E4 


LDY 

IOSTAT 

i YES — BREAK? 

A1D1 CO 80 


CPY 

#128 


A1D3 DO 04 


BNE 

ML0981 

i NO. 

A1D5 A9 87 


LDA 

#ABTERR 

; YES — CHANGE ERROR CODE. 

A1D7 85 B8 


STA 

NUMBER 


A1D9 20 12 BF 

ML0981 

JSR 

MESSOT 

; GENERATE ERROR MESSAGE. 

A1DC A5 B8 


LDA 

NUMBER 


AIDE C9 86 


CMP 

#IOERR 

i I/O ERROR? 

A1E0 DO 05 


BNE 

ML0982 

; NO. 

A1E2 A2 64 


LDX 

#IOSTAT-DTAB 

; YES — PRINT ERROR STATUS. 

A1E4 20 OB B7 


JSR 

DECASC 


A1E7 A9 08 

ML0982 

LDA 

#8 

; APPEND '***' TO END OF MESSAGE 


; *** EXTERNAL 

ENTRY POINT FROM 'MLOOP' **•* 

A1E9 20 12 BF 

ML0985 

JSR 

MESSOT 


A1EC 20 60 B8 


JSR 

NEWLIN 



A1EF 4C 7E AO 


ML0990 JMP 


MLRES 


i GET NEXT COMMAND. 


PILOT 


M B STEWART 


i LINE INSERT AND DELETE ROUTINES 


« 

, LIN8RT — INSERT NUMBERED LINE TO STATEMENT LIST 

CALLING SEQUENCE: 

'LINENO' - LINE • (BINARY) 

' INLN ' POINTS TO STATEMENT TO INSERT 
Y - INDEX TO FIRST BYTE OF STORAGE STATEMENT 





i JSR 

LINSRT 







i BNE 

NO ROOM 

IN MEMORY 

OR OTHER PROBLEM 

A1F2 

20 

OC A2 

I 

LINSRT JSR 

NUMNAM 

\ 

SETUP 

'LINENO' AS STRING NAME. 

AIF9 

84 

C4 

STY 

DP >2 

J 

SETUP 

STRING DATA POINTER. 

AIF7 

AS 

80 

LDA 

INLN 




A1F9 

89 

C2 

STA 

DP 




AIFB 

A9 

81 

LDA 

INLN+1 




A1FD 

89 

C3 

STA 

DP+1 




A IFF 

A9 

83 

LDA 

INLN+3 




A201 

89 

C9 

STA 

DP **-3 




A203 

4C 

08 B2 

f JMP 

SINSRT 

* 

INSERT 

LINE & RETURN WITH CC SET. 






i LDELET — NUMBERED LINE DELETE FROM STATEMENT LIST 




; CALLING SEQUENCE: 






i 

i 

i 

'LINENO' = LINE # 





JSR 

LDELET 





i 

i 

BNE 

LINE NOT 1 

A206 

20 

OC 

A2 

LDELET 

JSR 

NUMNAM 

A209 

4C 

9F 

B2 


JMP 

SDELET 












# 







; NUMNAM 

— 

SETUP 'LINENO 








; SETUP 'LINENO ' AS STRING NAME, 
i DELETE LINE Z< RETURN WITH CC SET. 










A20C 

A9 

DC 

NUMNAM LDA 

#L INENO 



A20E 

85 

3E 

STA 

NP 



A210 

A9 

00 

LDA 

#L JNENO/256 



A212 

85 

BF 

STA 

NP + 1 






; *S* LDA 

#0 



A214 

85 

CO 

STA 

NP-+-2 



A216 

A9 

02 

LDA 

#2 



A218 

85 

Cl 

STA 

NP+3 



A21 A 

4C 

92 B7 

JMP 

STMLST 

; SETUP 

TO ACCESS STATEMENT 












PILOT 


H. B STEWART 



PILOT 


H. B STEWART 


GETCOM — GET A COMMAND LINE FOR THE MAIN LOOP 
CALLING SEQUENCE: 

'LOADFG' = 0 IF NOT LOADING FROM DEVICE, ELSE LOADING. 
'RUN' = 0 IF IMMEDIATE MODE, ELSE RUN MODE. 

'NXTLN ' POINTS TO NEXT RUN MODE LINE. 

JSR GETCOM 

BNE ERROR (A = ERROR NUMBER) 

' INLN ' POINTS TO NEW COMMAND LINE. 

Y = INDEX TO START OF STATEMENT. 


'NXTLN' POINTS TO NEXT 


A21D AD 72 

05 

GETCOM 

LDA 

LOADFG 

A220 DO 32 



BNE 

GEC200 

A222 A5 FF 



LDA 

RUN 

A224 FO 24 



BEQ 

GEC100 

A226 20 46 

B8 

GEC010 

JSR 

ABRTCK 

A229 A2 00 



LDX 

#1 NLN-DTAB 

A22B AO 04 



LDY 

#NXTLN--DTAB 

A22D 20 CF 

B3 


JSR 

DMOVI 

A230 AO 00 



LDY 

#0 

A232 B 1 80 



LDA 

( INLN), Y 

A234 85 83 



STA 

INLN+3 

A236 AO 30 



LDY 

#S1H-DTAB 

A238 20 63 

B5 


JSR 

DCMPI 

A23B DO 03 



BNE 

GEC020 

A23D A9 81 



LDA 

#EOPERR 

A23F 60 



RTS 


A240 A2 04 


GEC020 

LDX 

#NXTLN--DTAB 

A242 20 10 

B4 


JSR 

SNXTI 

A245 AO 06 



LDY 

#6 

A247 A9 00 



LDA 

#0 

A249 60 



RTS 




; GET A 

LINE 

FROM THE CONSOLE 

A24A 


GEC100 





; *S* 

LDA 

#0 

A24A 85 83 



STA 

INLN+3 

A24C A2 00 



LDX 

# I NLN-DTAB 

A24E 20 9E AF 


JSR 

GETLIN 

A251 AO 00 



LDY 

#0 

A253 60 



RTS 



; GET DATA FROM DEVICE ASSIGNED 

GEC200 STX 
LDA 


RUN MODE LINE. 

; LOADING FROM DEVICE? 

; YES. 

; RUN MODE? 
i NO — IMMEDIATE. 

; YES — CHECK FOR OPERATOR ABORT, 
i GET NEXT STATEMENT ADDRESS. 


; GET & SAVE LINE END INDEX. 


; END OF PROGRAM? 

; NO — KEEP TRUCKIN'. 

; RETURN WITH INDICATOR. 

; POINT TO NEXT LINE. 

i SET INDEX TO START OF STATEMENT. 
; SET CC FOR RETURN. 


; CLEAR LINE LENGTH FOR "BREAK". 

; GET AN INPUT LINE FROM CONSOLE, 
i SET INDEX TO START OF STATEMENT (CC TOO). 

TO IOCB 3. 


A254 86 A1 
A256 A5 80 


TEMP 

INLN 


; SAVE REGISTERS. 

; SETUP BUFFER ADDRESS. 


PILOT 


H B STEWART 


A298 80 74 03 


STA 

IQCB3+ ICBAL 



A29B A9 81 


LDA 

INLN+1 



A29D 80 79 03 


STA 

I0CB3+ICBAH 



A260 A9 09 


LDA 

#GETR 

i 

GET RECORD COMMAND. 

A262 80 72 03 


STA 

I0CB3+ICC0M 



A269 A9 79 


LDA 

4LINLN0-1 

9 

SETUP MAXIMUM LINE LENGTH. 

A267 80 78 03 


STA 

I0CB3+ICBLL 



A26A A9 00 


LDA 

#LINLNG-l/256 



A26C 80 79 03 


STA 

I0CB3+ICBLH 



A26F A2 30 


LDX 

#1 0CB3 

i 

GET RECORD. 

A271 20 56 E4 


J SR 

CIO 



A274 AD 78 03 


LDA 

I0CB3+ICBLL 

i 

PUT START/END INDICES IN POINTER. 

A277 85 83 


STA 

INLN+3 



A279 A9 00 


LDA 

#0 



A27B 85 82 


STA 

INLN+2 



A27D CO 00 


CPY 

#0 

9 

ERROR? 

A27F 10 21 


BPL 

GEC250 

9 

NO. 


; *S* 

LDA 

#0 

9 

THAT OR END-OF-FILE. 

A281 80 72 05 


STA 

LOADFG 

i 

STOP LOADING IN EITHER CASE. 
END OF FILE? 

A284 CO 88 


CPY 

#$88 

9 

A2S6 DO 17 


BNE 

GEC220 

9 

NO. 

A288 20 FD BO 


JSR 

DCLOSE 

i 

YES — CLOSE DEVICE. 

A28B A 5 FF 


LDA 

RUN 

9 

IS THE USER PROGRAM RUNNING? 

A28D FO OA 


BEQ 

GEC210 

9 

NO — IMMEDIATE LOAD OR LOAD ERROR. 

A28F A5 AE 


LDA 

S1L 

9 

YES — SETUP TO RUN PROGRAM LOADED. 

A291 85 84 


STA 

NXTLN 



A293 A5 AF 


LDA 

S 1 L+ 1 



A295 85 85 


STA 

NXTLN+1 



A297 DO 8D 


BNE 

GEC010 

9 

(BRA). 

A299 20 33 BF 

GEC210 

JSR 

RDYMES 

9 

GENERATE •'READY** MESSAGE. 

A29C 4C 7E AO 


JMP 

MLRES 

9 

GRACEFUL TERMINATION OF LOAD. 

A29F 4C E6 BO 

0EC220 

JMP 

D0P005 

9 

ABORT LOAD OPERATION. 

A2A2 A6 A1 

GEC250 

LDX 

TEMP 

9 

RESTORE REGISTER. 

A2A4 A8 


TAY 


9 

SETUP INDEX TO START OF STATEMENT (=0) 

A2A 5 60 


RTS 


9 

RETURN WITH CC SET. 



u n 


CTCI.IADT 


PILOT 


H B STEWART 


A2A6 

A2A8 


A2AA 

A2AC 

A2AE 
A2B 1 

A2B4 

A2B7 

A2B9 

A2BB 

A2BE 

A2C0 

A2C 1 
A2C3 

A2C5 

A2C6 

A2C8 

A2CA 

A2CC 

A2CE 

A2D1 


A9 00 
FO 02 


SYCMND — SYNTAX CHECK THE COMMAND 

t CALLING SEQUENCE: 

X *= INDEX TO COMMAND TABLE START 
' INLN ' POINTS TO THE STATEMENT 
Y * INDEX TO START OF STATEMENT 


SYCMND 


JSR 

BNE 


SYCMND 

SYNTAX ERROR (A 


'CTABXR '+1 


ERROR CODE) 

INDEX TO COMMAND TABLE ENTRY FOR MATCH. 


LDA 

BEQ 


#0 

EXC010 


i RESET 
i (BRA). 


i EXCMND — EXECUTE THE COMMAND 
CALLING SEQUENCE: 

X = INDEX TO COMMAND TABLE START. 
' INLN ' POINTS TO THE STATEMENT 
Y = INDEX TO START OF STATEMENT 


JSR 

BNE 


EXCMND 

SYNTAX OR RUN-TIME ERROR (A = ERROR CODE) 


'CTABXR ' + 1 = INDEX TO COMMAND TABLE ENTRY FOR MATCH. 


A9 

FF 


EXCMND 

LDA 

85 

92 


EXC010 

STA 

20 

Cl 

B7 


JSR 

20 

FA 

B7 


JSR 

20 

EO 

B7 


JSR 

DO 

08 



BNE 

A9 

20 


EXC015 

LDA 

8D 

50 

05 


STA 

A9 

00 



LDA 

60 




RTS 

C9 

3A 


EXC020 

CMP 

DO 

ID 



BNE 

C8 




INY 

A5 

92 



LDA 

FO 

EF 



BEQ 

A5 

FF 



LDA 

FO 

2C 



BEQ 

AD 

04 

05 


LDA 

C9 

A7 



CMP 


#*FF 

EXEC 

SCNLBL 

SLB 

CHKTRM 

EXC020 

#CTABR+1~CTAB 

CTABXR+1 

#0 


EXC040 


EXEC 

EXC015 

RUN 

EXC050 

XJUMP+2 
«XRFM+1 /256 


j SET . . . 

; ... EXECUTE FLAG. 

; SCAN PAST LABEL IF PRESENT 


NULL LINE? 

NO. 

yijrcj DONE 

MAKE IT LOOK LIKE RUN-TIME COMMAND. 

SET CC FOR EXIT. 

RETURN WITH CC SET. 

COMMAND CONTINUATION? 

NO. 

YES. 

EXECUTE MODE? 

NO — ALL DONE. 

; yES E -- A u!e EX |xKF' & 'XJUMP' FROM PRIOR COMM 
. N0 — CHECK FOR 'T ' * 'Y'» 'N' OR R'- 



PILOT 


H B STEWART 


m 

*0 

p 


A2D3 90 25 


BCC 

EXC05O 

1 

A2D3 DO 07 


BNE 

EXC030 

i 

A2D7 AD 03 05 


LDA 

X JUMP* 1 

$ 

A2DA C9 5E 


CMP 

9XREM+1 


A2DC 90 1C 


BCC 

EXC050 

1 

A2DE 88 

EXC030 

DEY 



A2DF A9 02 


LDA 

#1 VCERR 

J 

A2EI 60 


RTS 



A2E2 20 10 A3 

EXC040 

J SR 

CMATCH 

j 

A2E5 DO 28 


BNE 

EXC900 

j 

A2E7 BD 2F A4 


LDA 

CDTAB* X 

j 

A2EA 8D 03 05 


STA 

X JUMP-*- 1 


A2ED BD 30 A4 


LDA 

CDTAB-*- 1 1 X 


A2F0 8D 04 05 


STA 

X JUMP -*-2 


A2F3 20 9D A4 


JSR 

COND 

i 

A2F6 A5 92 


LDA 

EXEC 

i 

A2F8 FO 04 


BEQ 

EXC070 

i 

A2FA A 5 FE 

EXC050 

LDA 

EXECF 

j 

A2FC FO 11 


BEQ 

EXC900 

# 

A2FE A 5 92 

EXC070 

LDA 

EXEC 

i 

A300 20 02 05 


JSR 

X JUMP 

9 

A303 DO OA 


BNE 

EXC900 

» 

A305 20 FA B7 


JSR 

SLB 

9 

A30S 20 EO B7 


JSR 

CHKTRM 

9 

A30B FO 02 


BEQ 

EXC900 

9 

A30D A9 02 


LDA 

#JNKERR 

9 

A30F 60 

EXC900 

RTS 


9 





PTI HT U R CTPUART 




O K 


I N V AL I D 

NOT SURE — CHECK FURTHER. 

O. K 

INVALID CONTINUATION 

FIND COMMAND 
INVALID. 

MOVE ADDRESS TO JUMP INSTRUCTION 


PROCESS CONDITION IF PRESENT. 
EXECUTE MODE? 

NO — SYNTAX SCAN ONLY. 

EXECUTE COMMAND? 

NO — NORMAL EXIT. 

SET CC FOR X-ROUTINES. 

YES — EXECUTE (OR SCAN). 
ERROR — RETURN WITH CC SET. 

SKIP ANY BLANKS. 

STATEMENT TERMINATOR? 

YES — O. K. 

JUNK — ERROR. 


RETURN WITH CC SET. 



PILOT 


H. B. STEWART 


CMATCH — COMMAND MATCH ROUTINE 

CALLING SEQUENCE: 

X = INDEX TO CTAB TO START SCAN. 

' I NLN ' POINTS TO SOURCE STATEMENT. 

Y = INDEX TO START OF COMMAND NAME. 

JSR CMATCH 

BNE NO MATCH IN TABLE (A = ERROR CODE) 

X = VALUE OF 'CTAB ' DATA BYTE FOR ENTRY (AND *7F). 

Y = INDEX TO START OF FIELD AFTER COMMAND NAME. 
'CTABXR'+l = INDEX TO COMMAND TABLE ENTRY FOR MATCH. 

NOTE: NAME MATCH MUST BE EXACT FOR THE REST OF THE 

STATEMENT TO BE PROCESSED CORRECTLY. FOR EXAMPLE: 
"TYPEN: " WILL BE SCANNED AS TY<JUNK>: , NOT 

TCJUNtON: . 


A3 10 

20 

FA 

B7 

CMATCH 

JSR 

SLB 

9 

SKIP LEADING BLANKS. 





i 

EXTERNAL 

ENTRY POINT FROM 

/ 

ATOM' *** 

A31 3 

84 

A1 


CMAT2 

STY 

TEMP 

i 

SAVE INDEX. 

A31 5 

88 




DEY 


# 

(PRE-DECREMENT). 

A316 

C8 



CMA005 

INY 




A31 7 

BD 

3A 

A3 

CMA010 

LDA 

CTAB, X 

i 

SEE IF END OF NAME IN TABLE. 

A31 A 

30 

15 



BMI 

CMA070 

i 

YES — MATCH FOUND. 

A3 1C 

E8 




I NX 




A3 ID 

D 1 

80 



CMP 

( INLN > i Y 

f 

MATCH SO FAR? 

A3 IF 

FO 

F5 



BEQ 

CMA005 

# 

YES — CONTINUE COMPARISON. 

A321 

E8 



CMA020 

I NX 


i 

SCAN TO END OF NAME ENTRY. 

A322 

BD 

39 

A3 


LDA 

CTAB-1, X 



A325 

10 

FA 



BPL 

CMA020 



A327 

A4 

A1 



LDY 

TEMP 

i 

RESTORE SOURCE INDEX. 

A329 

BD 

3A 

A3 


LDA 

CTAB, X 

9 

CHECK FOR END OF TABLE. 

A32C 

DO 

E9 



BNE 

CM AO 10 

i 

NO — KEEP CHECKING. 

A32E 

A9 

02 



LDA 

#1 VCERR 

9 

TABLE END — INVALID COMMAND. 

A330 

60 


... . 


RTS 



— * — — — - — -- - 

A331 

8E 

50 

05 

CMA070 

STX 

CTABXR+1 

9 

SAVE INDEX FOR CALLER. 

A334 

29 

7F 



AND 

#$7F 

9 

REMOVE SIGN BIT FROM TABLE BYTE. 

A336 

AA 




TAX 


9 

PUT IN X AS ADVERTISED. 

A337 

A9 

00 



LDA 

#0 

9 

SET CC FOR EXIT. 

A339 

60 




RTS 





PILOT 


H. B STEWART 


COMMAND TABLE 

CONSISTS OF N ENTRIES, EACH OF THE FOLLOWING FORMAT: 

. BYTE "CCOMMAND NAME>" , $80+INDEX TO DATA TABLE 

THE TOTAL NUMBER OF BYTES IN THE TABLE MAY NOT EXCEED 256. 

ORDER OF ENTRIES IS IMPORTANT, THE FIRST FOUND MATCH IS ACCEPTED 
THE BEST FIT. 


0080 

A33A 

SB=*80 

CTAB=* 


i SIGN BIT. 

i COMMAND TABLE BASE ADDRESS. 

A33A 

CTABI=* 


i IMMEDIATE MODE ONLY COMMANDS. 

A33A 4C 49 53 
A33D 54 80 


. BYTE 

"LIST", SB+CDLIST-CDTAB 

j LIST STORED PROGRAM. 

A33F 52 55 4E 
A342 84 


. BYTE 

"RUN", SB+CDRUN-CDTAB 

,• RUN STORED PROGRAM. 

A343 44 4F 53 
A346 86 


. BYTE 

"DOS", SB+CDDOS— CDTAB 

; GO TO DOS UTILITY. 

A347 53 41 56 
A34A 45 8A 


. BYTE 

"SAVE", SB+CDSAVE-CDTAB 

; SAVE STORED PROGRAM. 

A34C 4E 45 57 
A34F B6 


. BYTE 

"NEW", SB +CDNEW— CDTAB 

; CLEAR PROGRAM St VARS. 

A360 41 55 54 
A353 4F 8C 


. BYTE 

"AUTO", SB +CD AUTO— CDTAB 

; AUTO-INPUT. 

A355 52 45 4E 
A358 8E 


. BYTE 

"REN", SB+CDREN-CDTAB 

i RENUMEER PROGRAM. 

A359 

CTABR=* 


; IMMEDIATE OR RUN MODE 

COMMANDS. 

A359 44 55 4D 


. BYTE 

"DUMP", SB+CDDUMP-CDTAB 

; DUMP. 

A35C 50 82 





A35E 4C 4F 41 
A361 44 88 


. BYTE 

"LOAD", SB+CDL.OAD-CDTAB 

; LOAD. 

A363 54 52 41 


BYTE 

"TRACE", SB +CDTRC -CDTAB 

; TRACE. 

A366 43 45 92 





A369 56 4E 45 
A36C 57 B8 


BYTE 

"VNEW", SB+CDNEWV-CDTAB 

; VNEW. 

A36E 

CTABC=* 


; PRIOR COMMANDS DON 'T 

REQUIRE A r : '. 

A36E 43 41 4C 
A37 1 4C 90 


BYTE- 

"CALL", SB+CDCAL-CDTAB 

; CALL. 

A373 54 41 50 
A376 45 94 

• 

BYTE 

"TAPE", SB+CDCASS-CDTAB 

; CASSETTE ON/OFF. 


PILOT 


H. B. STEWART 



0 


. 15 Y I fc. 


HI 

A376 45 94 


* 

PILOT — 

H. B. 

STEWART 


A378 

54 

53 

59 


A37B 

4E 

43 

96 


A37E 

52 

45 

41 


A381 

44 

BA 



A3S3 

57 

52 

49 


A386 

54 

45 

BC 


A389 

43 

4C 

4F 


A38C 

53 

45 

BE 


A38F 

54 

98 



A391 

41 

9A 



A393 

43 

9C 



A395 

55 

9E 



A397 

45 

AO 



A399 

4A 

4D 

A2 


A39C 

4A 

A4 



A39E 

47 

52 

A6 


A3A1 

4D 

53 

A8 


A3A4 

4D 

AA 



A3A6 

53 

4F 

AC 


A3A9 

52 

AE 



A3AB 

50 

41 

BO 


A3AE 

59 

B2 



A3B0 

4E 

B4 



A3B2 

50 

4F 

53 


A3B5 

CO 




A3B6 

00 




A3B7 



OPTAB= 


A3B7 

2B 

C2 



A3B9 

2D 

C4 



A3BB 

2F 

C6 



A3BD 

2A 

C8 


* 

A3BF 

3C 

3E 

CA 


A3C2 

3E 

3D 

CC 


. BYTE 

. BYTE 

. BYTE 

. BYTE 

. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 

. BYTE 

. BYTE 
. BYTE 
. BYTE 
. BYTE 
. BYTE 


. BYTE 


"TSYNC" , SB+CDSYNC-CDTAB ; CASSETTE SYNC. 


"READ" , SB+CDIN-CDTAB 

; READ RECORD. 

"WRITE", SB+CDOUT— CDT AB 

; WRITE RECORD. 

"CLOSE", SB+CDDONE-CDTAB 

i CLOSE FILE. 

"T", SB+CDT-CDTAB 

; TYPE. 

"A", SB+CDA-CDTAB 

; ACCEPT. 

"C", SB +C DC— CDT AB 

i COMPUTE. 

"U", SB+CDU-CDTAB 

i USE (RUN ONLY). 

"E", SB+CDE-CDTAB 

; END (RUN ONLY). 

"JM", SB+CDJM-CDTAB 

; JUMP ON MATCH (RUN ONLY). 

"J", SB+CDJ-CDTAB 

; JUMP (RUN ONLY). 

"GR", SB+CDG-CDTAB 

; GRAPHICS. 

"MS", SB+CDMS-CDTAB 

i MATCH (PRODUCING) STRING. 

"M", SB+CDM-CDT AB 

i MATCH. 

"SO", SB+CDS-CDTAB 

; SOUNDS. 

"R", SB+CDR-CDTAB 

i REMARK. 

"PA", SB+CDW-CDTAB 

; PAUSE. 

"Y", SB+CDY-CDT AB 

; TYPE IF YES. 

"N", SB+CDN-CDTAB 

; TYPE IF NO. 

"POS", SB +C DP OS— CDTAB 

; POSITION. 

0 ; END 

OF TABLE. 


; NUMERIC /RELATIONAL OPERATORS. 


SB+CDPLUS-CDTAB 
SB +CDSUB— CDTAB 
"/", SB+CDDI V-CDTAB 
SB+CDMUL-CDTAB 
"<>", SB+CDNE-CDTAB 
'•>=", SB+CDGE-CDTAB 



PILOT 


H • STEWART 


A3C3 3C 30 CE 

BYTE SB+CDLE-CDTAB 

A3C0 30 00 

BYTE "»“« SB + CDEQ-CDTAB 

A3CA 3E 04 

BYTE “>“# SB+CDCT-CDTAB 

A3CC 3C 02 

BYTE "<*S SB+CDLT-CDTAB 

A3CE 3C D6 

.BYTE “\*S SB+CDMOD-CDTAB 

A 300 00 

BYTE 0 i END OF TABLE 

A301 

0TAB-* i GRAPHICS SUB-COMMAND TABLE 

A301 44 32 41 
A3D4 37 34 4F 
A3D7 D8 

.BYTE "DRAWTO'S SB+CDDRWT-CDTAB 

A3D8 44 32 41 
A3DB 37 DA 

BYTE "DRAW'S SB+CDDRW— CDTAB 

A 3DD 34 33 32 
A3E0 4 E 34 4F 
A3E3 DC 

. BYTE "TURNTO'S SB+CDTRNT-CDTAB 

A3E4 34 33 32 
A3E7 4E DE 

. BYTE "TURN'S SB+CDTRN-CDTAB 

A3E9 47 4F 54 
A3EC 4F EO 

. BYTE "GOTO", SB+CDGOTO-CDTAB 

A3EE 46 49 4C 
A3F1 4C 54 4F 
A3F4 E4 

/ .BYTE "FILLTO'S SB+CDFILT-CDTAB 

A3FS 46 49 4C 
A3F8 4C E6 

.BYTE "FILL'S SB+CDFIL-CDTAB 

A3FA 47 4F E2 

__--(TbY TE "GO'S SB+CDGO-CDTAB \ 

A3FD 50 45 4E 
A400 E8 

.BYTE "PEN'S SB+CDPEN-CDTAB 

A401 43 4C 45 
A404 41 52 EA 

• BYTE "CLEAR", SB+CDCLR-CDTAB 

A407 51 55 49 
A40A 54 EC 

. BYTE "QUIT'S SB+CDEX IT-CDTAB 

A40C 00 

• BYTE 0 ; END OF TABLE. 

A40D 

PCTAB-* ; PEN COLOR TABLE. 

A40D 52 45 44 
A410 81 

. BYTE "RED'S SB + 1 

A41 1 59 45 4C 
A414 4C 4F 57 
A417 82 

. BYTE "YELLOW'S SB+2 


ILOT 


H. B STEWART 


A414 4C 4 F 57 
A417 82 


PILOT — H B STEWART 


A418 

42 

4C 

55 

. BYTE 

"BLUE", SB+3 




A41B 

45 

83 







A41D 

45 

52 

41 

. BYTE 

"ERASE ", SB+O 




A420 

53 

45 

80 






A423 

55 

50 

84 

. BYTE 

"UP", SB+PCUP 




A426 

00 



. BYTE 

0 

i END 

OF 

TABLE. 

A427 




CCTAB=* 


i CASSETTE/TRACE 

A427 

4F 

4E 

B4 

. BYTE 

"ON", CASSON 




A42A 

4F 

46 

46 

. BYTE 

"OFF", CASSOF 




A42D 

BC 








A42E 

00 



. BYTE 

0 

i END 

OF 

TABLE. 


OOF 5 


TABLEN=*-CTAB 


i MUST NOT EXCEED 0100 HEX. 


> COMMAND DATA TABLE 

i 

i CONSISTS OF N ENTRIES OF ANY LENGTH, THE INDICES TO THIS TABLE ARE 
i CONTAINED IN 'CTAB THE TOTAL NUMBER OF BYTES IN THE TABLE MAY NOT 
; EXCEED 128. 


A42F 

CDTAB= 

■* 

A42F 26 AE 

CDLIST 

. WORD 

A431 D5 AA 

CDDUMP 

. WORD 

A433 CO A7 

CDRUN 

. WORD 

A435 B8 A7 

CDDOS 

. WORD 

A437 05 AE 

CDLOAD 

. WORD 

A439 D4 AD 

CDSAVE 

. WORD 

A43B Cl AE 

CDAUTO 

. WORD 

A43D IF AF 

CDREN 

. WORD 

A43F OC AA 

CDCAL 

. WORD 

A441 CO AD 

CDTRC 

. WORD 

A443 91 AD 

CDCASS 

. WORD 

A445 A2 AD 

CDSYNC 

. WORD 

A447 DC A6 

CDT 

. WORD 

A449 E3 A 7 

CDA 

. WORD 

A44B 37 AB 

CDC 

. WORD 

A44D 25 AA 

CDU 

. WORD 

A44F 92 A7 

CDE 

. WORD 

A451 A7 AA 

CDJM 

. WORD 

A453 48 AA 

CDJ 

. WORD 

A455 FE AB 

CDG 

. WORD 

A457 51 A9 

•CDMS 

. WORD 

A459 B6 A8 

CD M 

. WORD 

A45B 9B AC 

CDS 

. WORD 

A45D 5D A7 

CDR 

. WORD 

A45F 6D AD 

CDW 

. WORD 

A461 4F A7 

CDY 

. WORD 

A463 57 A7 

CDN 

. WORD 


; COMMAND DATA TABLE BASE ADDRESS. 

XL 1ST 

XDUMP 

XRUN 

XDOS 

XLOAD 

XSAVE 

XAUTO 

XREN 

XCALL 

XTRACE 

XCASS 

XCSYNC 

XTYPE 

XACCPT 

XCMPUT 

XUSE 

XEND 

XJMPM 

XJMP 

XGRAPH 

XMWSP 

XMATCH 

XSOUND 

XREM 

XWAIT 

XTYPE2 

XTYPE3 


PILOT 


H B STEWART 


A465 F8 A9 

CDNEW 

WORD 

XNEW 

A467 BA A9 

CDNEWV 

. WORD 

XNEWV 

A469 DE AC 

COIN 

WORD 

XIN 

A46B 29 AD 

CDOUT 

. WORD 

XOUT 

A46D 5C AD 

CDDONE 

. WORD 

XDONE 

A46F 60 A7 

CDPOS 

. WORD 

XPOS 

A471 80 B5 

CDPLUS 

. WORD 

DADD I 

A473 90 85 

CDSUB 

. WORD 

DSUDI 

A475 D5 85 

CDDIV 

. WORD 

DDIVI 

A477 A2 35 

CDMUL 

. WORD 

DMULI 

A479 6C 86 

CDNE 

. WORD 

DNETI 

A47B 83 B6 

CDGE 

WORD 

DGETI 

A47D 8A B6 

CDLE 

WORD 

DLETI 

A47F 65 B6 

CDEQ 

. WORD 

DEGTI 

A481 7C B6 

CDLT 

. WORD 

DLTTI 

A483 73 B6 

CDGT 

WORD 

DGTTI 

A485 33 B6 

CDMOD 

. WORD 

DMODI 


A487 

Cl 

B9 

CDDRWT 

. WORD 

GDRWTQ 

A489 

OA 

BA 

CDDRW 

. WORD 

GDRW 

A48B 

F4 

B9 

CDTRNT 

. WORD 

GTRNTO 

A48D 

36 

BA 

CDTRN 

. WORD 

GTRN 

A48F 

C5 

B9 

CDGOTO 

. WORD 

GGOTO 

A491 

OE 

BA 

CDGO 

. WORD 

GGO 

A493 

BD 

B9 

CDFILT 

. WORD 

GFILTO 

A495 

06 

BA 

CDFIL 

. WORD 

GFIL 

A497 

4B 

BA 

CDPEN 

. WORD 

GPEN 

A499 

9A 

BA 

CDCLR 

. WORD 

GCLEAR 

A49B 

5D 

BA 

CDEXIT 

. WORD 

GEXIT 


006E 


TABLEN = *- CDTAB 


THIS MUST NOT EXCEED 0080 HEX. 
































PILOT — H. B. STEWART 








PILOT 


H. B. STEWART 


COND — CONDITIONAL EXECUTION PROCESSOR 
CALLING SEQUENCE: 

' INLN ' POINTS TO STATEMENT TO BE PROCESSED 
Y = INDEX TO START OF CONDITION. 

'MATCHF 7 = 0 (FALSE) OR *FF (TRUE) 


RESULT OF PRIOR 7 M 7 COMMAND. 


JSR 


COND 






; NOTE: 

GOES 

TO 7 P STOP 7 Ot 

A49D 

A9 

FF 


COND 

LDA 

#$FF 

A49F 

85 

FE 



STA 

EXECF 

A4A1 

20 

FA 

B7 


JSR 

SLB 

A4A4 

C9 

59 



CMP 

# 7 Y 

A4A6 

DO 

05 



BNE 

CND010 

A4AS 

A5 

FD 



LDA 

MATCHF 

A4AA 

4C 

B7 

A4 


JMP 

CND015 

A4AD 

C9 

4E 


CND010 

CMP 

#'N 

A4AF 

DO 

OC 



BNE 

CND030 

A4B 1 

A5 

FD 



LDA 

MATCHF 

A4B3 

FO 

04 


* 

BEQ 

CND017 

A4B5 

A9 

00 



LDA 

#0 

A4B7 

85 

FE 


CND015 

STA 

EXECF 

A4B9 

C8 



CND017 

INY 


A4BA 

20 

FA 

B7 


JSR 

SLB 

A4BD 

C9 

28 


CND030 

CMP 

#' ( 

A4BF 

DO 

14 



BNE 

CND050 

A4C 1 

20 

92 

B8 


JSR 

EXP 

A4C4 

A5 

94 



LDA 

EXPSTK+1 

A4C6 

30 

06 



BMI 

CND032 

A4C8 

DO 

08 



BNE 

CND040 

A4CA 

A5 

93 



LDA 

EXPSTK 

A4CC 

DO 

04 



BNE 

CND040 

A4CE 

A9 

00 


CND032 

LDA 

#0 

A4D0 

85 

FE 



STA 

EXECF 

A4D2 

20 

FA 

B7 

CND040 

JSR 

SLB 

A4D5 

C9 

3A 


CND050 

CMP 

#': 

A4D7 

DO 

02 



BNE 

CND080 

A4D9 

C8 




INY 



Y = INDEX TO 7 IN STATEMENT + 1. 

'EXECF 7 = O IF STATEMENT IS NOT TO BE EXECUTED. 


PRESET EXECUTE FLAG. 


GET FIRST CHAR OF CONDITION FIELD. 
CHECK FOR 7 Y 7 OR 7 N 7 FIRST. 


Y 7 


IF 'MATCHF 7 IS TRUE, RESULT IS TRUE. 


NOT 7 Y 7 OR 7 N 7 . 

/ N / — jF 'MATCHF 7 IS FALSE, RESULT IS TRUE 


; GET NEXT NON-BLANK CHARACTER. 

; SEE IF ARITHMETIC EXPRESSION. 

; NO — ALL DONE. 

; EVALUATE EXPRESSION IN PARENS. 


; SEE IF RESULT > ZERO. 

; NO — NEGATIVE. 

. YES — POSITIVE & NON-ZERO. 

; NOT SURE — TEST LSB. 

; POSITIVE & NON-ZERO. 

; NO — CONDITION FALSE. 

i GET NEXT NON-BLANK CHARACTER. 

; COLON? 

; NO. 


; SKIP OVER 


/ . / 





PILOT 


H 8 STEWART 


■ 


A4DA 60 


CND070 RTS 


A4DB AD SO OS 
A4DE C9 34 
A4E0 90 F8 


CNDOQO 


LDA 

CMP 

BCC 


CTABXR+l 

#CTABC-CTAB 

CND070 


i * : * REQUIRED FOR THIS COMMAND? 
i NO. 


A4E2 88 
A4E3 A9 02 
A4ES 4C 6C A 1 


DEY 

LDA 

JMP 


4CNDERR 

PSTOP 


* YES — ERROR. 






PILOT 


H. B 


STEWART 


A4E8 20 FA B7 


A4EB 20 EO B7 
A4EE FO 33 

A4F0 C9 23 
A4F2 FO 34 

A4F4 C9 40 
A4F6 FO 57 

A4F8 C9 24 
A4FA DO 03 

A4FC 4C 8B A5 

A4FF C9 25 
A501 DO 03 

A503 4C F2 A5 

A506 20 7 A B7 
A509 BO 03 

A50B 4C D4 A5 

A50E 20 88 B7 
A51 1 BO 03 

A513 4C DD A5 

A516 A2 7D 
A518 20 13 A3 
A51B DO 03 

A51D 4C El A5 

A520 A9 02 
A522 60 


; ATOM — FIND, IDENTIFY & EVALUATE THE NEXT ATOM IN THE STATEMENT LINE. 

I CALLING SEQUENCE: 

' INLN ' POINTS TO THE STATEMENT LINE, 
i Y = INDEX TO END OF PRIOR ATOM + 1. 

JSR ATOM 

BNE SYNTAX ERROR 

A = ATOM IDENTIFIER CODE 

Y = INDEX TO END OF ATOM + 1 < OR BEGINNING OF ATOM FOR TEXT TYPE) 

'NUMBER' = VALUE OF NUMERIC CONSTANT OR NUMERIC VARIABLE. 

'POINT' = ADDRESS OF NUMERIC VARIABLE OR OPERATOR ROUTINE. 


I 

'NP 

' POINTS TO STRING 

VARIABLE NAME. 

# 

'DP 

' POINTS TO STRING 

VARIABLE VALUE (IF DEFINED). 

i 

ATOM 

JSR 

SLB 

i 

SKIP LEADING BLANKS, IF PRESENT. 


INTERNAL RE-ENTRY POINT 



AT0M2 

JSR 

CHKTRM 

# 

NULL ATOM (STATEMENT TERMINATOR)? 


BEQ 

ATM100 

> 

YES. 


CMP 

#'# 

# 

NUMERIC VARIABLE? 


BEQ 

ATM200 

i 

YES. 


CMP 

# '@ 

i 

POINTER? 


BEQ 

ATM250 

i 

YES. 


CMP 

# '* 

# 

STRING VARIABLE? 


BNE 

ATM003 

i 

NO. 


JMP 

ATM300 

i 

YES. 

ATM003 

CMP 

# '7. 

# 

JOYSTICK/PADDLE/LIGHTPEN? 


BNE 

ATM005 

# 

NO. 


JMP 

ATM700 

9 

YES. 

ATM005 

JSR 

CNUMBR 

9 

NUMERIC LITERAL? 


BCS 

ATM010 

9 

NO 


JMP 

ATM400 

9 

YES. 

ATM010 

JSR 

CLETTR 

9 

CONTEXT DEPENDENT TEXT? 


BCS 

ATM020 

9 

NO. 


JMP 

ATM500 

9 

YES. 

ATM020 

LDX 

JSR 

#OPTAB-CTAB 

CMAT2 

9 

SPECIAL OPERATOR? 


BNE 

ATM099 

9 

NO. 


JMP 

ATM600 

9 

YES. 

ATM099 

LDA 

RTS 

#ATMERR 

9 

9 

NONE OF THE ABOVE — ERROR. 
RETURN WITH CC SET. 


PILOT 


M B STEWART 


A923 A9 01 
A 929 4C 07 A6 


i NULL ATOM — <EOL> 
ATMIOO LDA 


•NULL 

ATMRET 


» NUMERIC VARIABLE 


•<LETTER> 


A928 C8 

ATM200 I NY 




A929 B 1 80 

LDA 

( INLN). Y 

- 

GET VARIABLE NAME 

A92B 20 88 B7 

JSR 

CLETTR 

1 

IS IT A PROPER LETTER? 

A92E BO FO 

BCS 

ATM099 

4 

NO — SYNTAX ERROR. 

A930 38 

SEC 


1 

(CLEAR BORROW) 

A931 E9 41 

SBC 

• ' A 

4 

RELATIVIZE 

A933 OA 

ASL 

A 

1 

X2. 

A 934 AA 

TAX 


i 

INDEX TO 'VARTAB * 

A939 18 

CLC 


1 

CALCULATE ADDRESS OF VAR 

A 936 69 IB 

ADC 

•VARTAB 



A938 89 B6 

STA 

POINT 



A93A A9 09 

LDA 

•VAR TAB/ 256 



A93C 69 00 

ADC 

•0 



A93E 85 B7 

STA 

POINT+1 



A940 C8 

INY 


i 

SCAN TO END OF ATOM 


; JSR 

SCEOA 

i 

SCAN TO END OF ATOM. 

A541 BD IB 05 

LDA 

VARTAB, X 

4 

MOVE VALUE TO 'NUMBER'. 

A544 85 B8 

STA 

NUMBER 



A546 BD 1C 05 

LDA 

VARTAB+1 , X 



A549 85 B9 

STA 

NUMBER+1 



A54B A9 04 

LDA 

•NVAR 



A54D DO 6B 

BNE 

ATM340 

i 

(BRA) TO ' ATMRET ' . 


A54F C8 
A550 B 1 80 
A552 C9 42 
A 5 54 08 
A555 DO 03 

A557 C8 
A558 B1 80 

A55A 20 EB A4 
A55D DO 28 

A55F 29 06 
A561 FO 24 

A563 A5 B8 
A565 85 B6 
A567 A5 B9 


; POINTER (INDIRECT REFERENCE) 
ATM250 


ATM255 



INY 

LDA 

( I NL.N ) , Y 

CMP 

# 'B 

PHP 

BNE 

ATM255 

INY 

LDA 

( INLN), Y 

JSR 

AT0M2 

BNE 

ATM290 

AND 

#NVAR+NUM 

BEQ 

ATM290 

LDA 

NUMBER 

STA 

POINT 

LDA 

NUMBER+1 


— eCBKNUMERIC QUANT IT Y> 

; EXAMINE CHARACTER AFTER 

; POINTER TO BYTE? 

; SAVE ANSWER. 

; NO — POINTER TO WORD. 

. YES — SKIP OVER 'B ' . 
i GET CHARACTER AFTER 'B'. 


i SEE WHAT FOLLOWS *** RECURSIVE CALL 
; ERROR. 

; MUST BE NUMERIC. 

; ERROR. 

; RESULT IS ADDRESS OF DATA. 




PILOT 


H. B. STEWART 



PILOT 


H. B STEWART 


A569 

85 

B7 


STA 

POINT+1 

A56B 

84 

A 1 


STY 

TEMP 

A56D 

AO 

00 


LDY 

#0 

A56F 

B 1 

B6 


LDA 

(POINT ) , Y 

A571 

85 

B8 


STA 

NUMBER 

A573 

28 



PLP 


A574 

DO 

06 


BNE 

ATM260 

A576 

84 

B9 


STY 

NUMBER+1 

A578 

A9 

80 


LDA 

#BPTR 

A57A 

DO 

07 


BNE 

ATM270 

A57C 

CS 


ATM260 

I NY 


A57D 

B 1 

B6 


LDA 

(POINT ) > Y 

A57F 

85 

B9 


STA 

NUMBER+1 

A581 

A9 

04 


LDA 

#NVAR 

A583 

A4 

A 1 

ATM270 

LDY 

TEMP 

A585 

DO 

33 


BNE 

ATM340 

A587 

28 


ATM290 

PLP 


A588 

4C 

20 A5 


JMP 

ATM099 


; STRING VARIABLE — $<ANY 


A58B 

C8 



ATM300 

I NY 


A58C 

B 1 

80 



LDA 

( I NLN ) / Y 

A58E 

C9 

24 



CMP 


A 590 

FO 

2B 



EEQ 

ATM350 

A592 

20 

A4 

B7 


JSR 

CKEOA 

A595 

FO 

89 



BEQ 

ATM099 

A597 

A5 

80 



LDA 

I NLN 

A599 

85 

BE 



STA 

NP 

A59B 

A5 

81 



LDA 

INLN+1 

A59D 

85 

BF 



STA 

NP + 1 

A59F 

84 

CO 



STY 

NP+2 

A5A1 

20 

B9 

B7 


JSR 

SCEOA 

A5A4 

84 

Cl 



STY 

NP+3 

A5A6 

98 



ATM320 

TYA 


A5A7 

48 




PHA 


A5A8 

20 

9B 

B7 


JSR 

SETSVL 

A5AB 

20 

81 

B2 


JSR 

SFIND 

A5AE 

DO 

06 



BNE 

ATM330 

A5B0 

68 




PLA 


A5B1 

A8 




TAY 


A5B2 

A9 

08 



LDA 

#SVAR 

A5B4 

DO 

04 



BNE 

ATM340 

A5B6 

68 



ATM330 

PLA 


A5B7 

A8 




TAY 


A5B8 

A9 

10 



LDA 

#USVAR 


SAVE LINE INDEX. 

GET DATA VALUE NOW. 


# 

i 


; POINTER TO BYTE? 
i NO — POINTER TO WORD. 

; YES — MSB = 0. 
i TYPE = POINTER TO BYTE, 
i (BRA). 


i GET MSB OF DATA WORD. 

; TYPE = POINTER TO WORD. 

; RESTORE LINE INDEX. 

; (BRA) SKIP TO NORMAL RETURN. 

; CLEANUP STACK BEFORE RETURN. 
; ERROR RETURN. 


OF ALPHANUM> 

; EXAMINE CHARACTER AFTER 

; STRING INDIRECTION? 

; YES. 

. N0 — STRING NAME ERROR? 
i YES. 

i NO — SET NAME POINTER TO NAME. 


; SCAN TO END OF ATOM. 

; SAVE END INDEX. 

; SAVE LINE INDEX. 

; SET LIST POINTER TO STRING VARIABLES. 
; FIND VARIABLE IF DEFINED, 
i UNDEFINED. 

; RESTORE LINE INDEX. 

; DEFINED STRING VARIABLE. 

; (BRA) TO 'ATMRET'. 

; RESTORE LINE INDEX. 


UNDEFINED STRING VARIABLE. 


( , 


PILOT — H B STEWART 


ASBA 4C 07 A6 


A SCO DO 11 

A5C2 C9 10 
A5C4 FO F4 

A5C6 84 A 1 
A5C8 A2 3E 
A5CA AO 42 
A5CC 20 C5 B3 
A5CF A4 A 1 
A5D1 DO D3 

A5D3 60 


A6 

ATM340 

JMP 

ATMRET 

AS 

ATM350 

JSR 

ATM300 



BNE 

ATM360 


/ 

X 

CMP 

#USVAR 


l 


ATM340 


STY 

TEMP 

LDX 

4NP-DTAB 

LDY 

#DP-DTAB 

JSR 

PMOVE 

LDY 

TEMP 

BNE 

ATM320 

RTS 



i *** SKIP BRANCH POINT *** 

* INDIRECTION — GET NAME *** RECURSIVE CALL ***. 
i ERROR. 


i UNDEFINED STRING? 
i YES — ALL DONE.B 


DEFINED — USE DATA AS NAME FOR TARGET. 


; (BRA) NOW GET STRING. 


; NUMERIC LITERAL — CDIGITXANY NUMBER OF DIGITS> 


A5D4 

A2 

00 

ATM400 LDX 

#INLN— DTAB 

A5D6 

20 

B2 B6 

JSR 

ASCDEC 

A5D9 

A9 

02 

LDA 

#NUM 

A5DB 

DO 

DD 

BNE 

ATM340 


POINT TO POINTER. 

CONVERT TO BINARY, RESULT TO 'NUMBER 


(BRA) TO ' ATMRET 


TEXT — CLETTERXANY NUMBER OF CHARACTERS> 


A5DD 

A9 

20 


ATM500 LDA 

#TEXT 

A5DF 

DO 

D9 


BNE 

ATM340 





; OPERATOR — 

COPERATOR> 

A5E1 

BD 

2F 

A4 

ATM600 LDA 

CDTAB, X 

A5E4 

85 

B6 


STA 

POINT 

A5E6 

BD 

30 

A4 

LDA 

CDTAB+1# X 

A5E9 

85 

B7 


STA 

POINT+1 

A5EB 

A9 

40 


LDA 

#OPR 

A5ED 

DO 

CB 


BNE 

ATM340 


(BRA) TO 'ATMRET' 


; GET OPERATE ROUTINE ADDRESS. 


(BRA) TO 'ATMRET' 


; CONTROLLERS — 7. CP ! J ! TXNUMBER> OR 7.CX ! Y ! Z ! A ! H ! V ! L ! M ! F> 


* 

A5EF 

4C 

20 A5 

ATM720 

JMP 

ATM099 

; ERROR. 


A5F2 

C8 


ATM700 

I NY 


; SKIP OVER '7.'. 

w 

A5F3 

B 1 

80 


LDA 

( I NLN ) , Y 

; GET NEXT CHARACTER. 


A5F5 

C9 

50 


CMP 

# 'P 

; PADDLE CONTROLLER? 

* 

A5F7 

FO 

2F 


BEQ 

ATM730 

i YES. 


A5F9 

C9 

46 


CMP 

#'F 

; FREE MEMORY? 

% 

A5FB 

FO 

3C 


BEQ 

ATM740 

i YES. 


A5FD 

C9 

4A 


CMP 

# 'J 

; JOYSTICK? 


A5FF 

FO 

51 


BEQ 

ATM760 

; YES. 


PILOT 


H. B. STEWART 


A5FB 

FO 

3C 

BEQ 

ATM740 

A5FD 

C9 

4A 

CMP 

# ' J 

A5FF 

FO 

51 

BEQ 

ATM760 

I LOT — H 

. B. 

STEWART 




A601 C9 54 

CMP 

# 7 T 

A603 FO 5D 

BEQ 

ATM770 

A605 C9 58 

CMP 

# 7 X 

A607 FO 72 

BEQ 

ATM782 

A609 C9 59 

CMP 

# 7 Y 

A60B FO 72 

BEQ 

ATM784 

A60D C9 5A 

CMP 

# 7 Z 

A60F FO 79 

BEQ 

ATM788 

A61 1 C9 41 

CMP 

# 7 A 

A613 FO 6E 

BEQ 

ATM786 

A615 C9 48 

CMP 

# 7 H 

A617 FO 78 

BEQ 

ATM790 

A619 C9 56 

CMP 

# 7 V 

A61B FO 79 

BEQ 

ATM795 

A61D C9 4C 

CMP 

# 7 L 

A61F FO 7 A 

BEQ 

ATM796 

A621 C9 4D 

CMP 

# 7 M 

A623 DO CA 

BNE 

ATM720 

A625 4C AE A6 

JMP 

ATM798 


; READ PADDLE 

CONTROLLER 

A628 20' B3 A6 

ATM730 JSR 

ATM800 

A62B DO 28 

BNE 

ATM761 

A62D 29 07 

AND 

#$07 

A62F AA 

TAX 


A630 38 

SEC 


A631 A9 E4 

LDA 

#228 

A633 FD 70 02 

SBC 

PADDLO, X 

A636 4C 71 A6 

JMP 

ATM780 


; CALCULATE FREE MEMORY 

A639 Ce 

ATM740 I NY 


A63A 38 

SEC 


A63B A5 32 

LDA 

S2L 

A63D E5 BO 

SBC 

SI H 

A63F 85 B8 

STA 

NUMBER 

A641 A5 B3 

LDA 

S2L+1 

A643 E5 B 1 

SBC 

S1H+1 

A645 85 B9 

STA 

NUMBER+1 

A647 E6 B8 

INC 

NUMBER 

A649 DO 02 

BNE 

ATM745 

A64B E6 B9 

INC 

NUMBER+1 

A64D A9 02 

ATM745 LDA 

#NUM 

A64F 4C D7 A6 

JMP 

ATMRET 


; READ JOYSTICK 


YES 


JOYSTICK? 

YES. 


TRIGGER? 

YES. 



GRAPHICS 

YES. 

X? 


GRAPHICS 

YES. 

Y? 


GRAPHICS 

YES. 

PIXEL 

VALUE. 

GRAPHICS 

YES. 

THETA 

ANGLE? 

LIGHTPEN 

YES. 

HORIZONTAL? 

LIGHTPEN 

YES. 

VERTICAL? 

LIGHTPEN 

YES. 

TRIGGER? 

MATCH RESULT? 
NO. 


YES. 




GET VALUE THAT FOLLOWS 'P 
ERROR. 

PADDLE # MODULO 8. 

(CLEAR BORROW). 

RESULT = 228 - VALUE READ. 


SKIP OVER 'F ' . 

'NUMBER ' = 7 S2L 7 - 7 S1H 7 + 1. 


TYPE = NUMBER. 


PILOT 


H. B STEWART 


A692 20 B3 A6 

ATM760 JSR 

ATMBOO 

A655 DO 6A 

ATM761 BNE 

ATM890 

A657 29 03 

AND 

4*403 

A659 AA 

TAX 


A65A BD 78 02 

LDA 

STICKO, X 

A65D 49 OF 

EOR 

#4 OF 

A65F 4C 71 A6 

JMP 

ATM780 


1 READ TRIGGER 

A662 20 B3 A6 

ATM770 JSR 

ATM800 

A665 DO 5A 

BNE 

ATM890 

A667 29 OF 

AND 

#40F 

A669 AA 

TAX 


A66A BD 7C 02 

LDA 

PTRIGO, X 

A66D 49 FF 

EOR 

#4FF 

A66F 29 01 

AND 

#401 

A67 1 A2 00 

ATM780 LDX 

#0 

A673 85 B8 

ATM781 STA 

NUMBER 

A675 86 B9 

STX 

NUMBER+1 

A677 A9 02 

LDA 

#NUM 

A679 DO 5C 

BNE 

ATMRET 


; GRAPHICS PARAMETERS 

A67B A2 6C 

ATM7S2 LDX 

#GX-DTAB 

A67D BO 46 

BCS 

ATM900 

A67F A2 6F 

ATM784 LDX 

#GY— DTAB 

A681 BO 42 

BCS 

ATM900 

A683 A5 F2 

ATM786 LDA 

THETA 

A685 A6 F3 

LDX 

THETA+1 

A687 C8 

INY 


A688 DO E9 

BNE 

ATM781 

A68A C8 

ATM788 INY 


A68B 20 A 7 BC 

JSR 

GREAD 

A68E 4C 71 A6 

JMP 

ATM780 


; READ LIGHTPEN 


A691 AD 34 02 

ATM790 LDA 

LPENH 

A694 BO OC 

BCS 

ATM797 

A696 AD 35 02 

ATM795 LDA 

LPENV 

A699 BO 07 

BCS 

ATM797 

A69B AD 78 02 

ATM796 LDA 

STICKO 

A69E 49 01 

EOR 

#401 

A6A0 29 01 

AND 

#401 

A6A2 A6 92 

ATM797 LDX 

EXEC 

A6A4 FO 05 

BEQ 

ATM79B 

A6A6 A2 OA 

LDX 

#40A 


GET VALUE THAT FOLLOWS 'J'. 

ERROR *** SKIP BRANCH POINT *** 

JOYSTICK # MODULO 4 

GET JOYSTICK DATA FROM DATA BASE 
INVERT DATA READ 


GET VALUE THAT FOLLOWS 'T ' . 

ERROR. 

TRIGGER # MODULO 16. 

RESULT = SINGLE BIT. 

M. S. B. = O. 

STORE RESULT. 

NUMERIC RESULT. n 

(BRA). J fVT M ^ 

GRAPHICS X COORDINATE. 

(BRA) . 

GRAPHICS Y COORDINATE. 

(BRA). 

GRAPHICS THETA ANGLE. 

(BRA). 

READ GRAPHICS DATA. 


LIGHTPEN HORIZONTAL VALUE. 
(BRA). 

LIGHTPEN VERTICAL VALUE. 
(BRA). 

GET LIGHTPEN TRIGGER. 
INVERT BIT OF INTEREST. 


EXECUTE MODE? 
NO. 


BACKGROUND » LIGHT GRAY. 


A6A2 A6 92 
A6A4 FO 05 

A6A6 A2 OA 


ATM797 LDX 
BEQ 

LDX 


PILOT — H. B. STEWART 


A6A8 BE C8 02 


STX 


A6AB 

C8 


ATM79B 

I NY 

A6AC 

DO 

C3 


BNE 




i READ 

MATCH 

A6AE 

A5 

FD 

ATM798 

LDA 

A6B0 

C8 



I NY 

A6B 1 

DO 

BE 


BNE 




i SUBROUTINE 

A6B3 

C8 


ATM800 

I NY 

A6B4 

20 

E8 A4 


JSR 

A6B7 

DO 

09 


BNE 

A6B9 

29 

06 


AND 

A6BB 

FO 

05 


BEQ 

A6BD 

A5 

B8 


LDA 

A6BF 

C5 

B8 


CMP 

A6C 1 

60 


ATM890 

RTS 

A6C2 

A9 

02 

ATM895 

LDA 

A6C4 

60 



RTS 


; SUBROUTINE 


A6(^5 C8 
A6C6 B5 82 
A6C8 2A 
A6C9 B5 80 
A6CB 69 00 
A6CD 85 B8 
A6CF B5 81 
A6D1 69 00 
A6D3 85 B9 
A6D5 A9 02 


A6D7 85 A1 
A6D9 C5 A1 
A6DB 60 


ATM900 I NY 



EXEC 

ATM79B 

i EXECUTE MODE? 
1 NO 

«*0A 

i BACKGROUND « LIGHT GRAY. 


COLORO+4 


ATM780 

FLAG 

i (BRA). 

MATCHF 

i MATCH RESULT FLAG. 

ATM780 

j (BRA). 

TO PROCESS NUMBER 

FOLLOWING 7.P# 7.J & 7.T. 

ATOM 

ATM895 

i SKIP OVER 'P' OR 'J' OR 'T ' . 
i *** RECURSIVE CALL ***. 
i ERROR. 

#NVAR+NUM 

ATM895 

i NUMERIC RESULT? 
; NO — ERROR. 

NUMBER 

NUMBER 

> YES. 

i SET CC FOR NORMAL EXIT. 


; RETURN WITH CC SET. 


#ATMERR 

i INVALID # AFTER LETTER. 
; RETURN WITH CC SET. 


TO ROUND & STORE THE GRAPHICS COORDINATES 


DTAB+2, X 
A 

DTAB+O, X 
#0 

NUMBER 

; GET FRACTIONAL PORTION. 

; MSB OF FRACTION TO CARRY BIT. 
; ROUND LSB. 

DTAB+li X 
#0 

NUMBER+1 

; CARRY TO MSB. 

#NUM 

; NUMERIC RESULT. 

TEMP 

TEMP 

i SET CC FOR EXIT. 


H B, STEWART 


PILOT — 



i XTYPE — 

TYPE COMMAND PROCESS 

A6DC 20 43 B9 

i 

XTYPE JSR 

TEXP 


; *S* LDA 

EXEC 

A6DF FO 6D 

BEQ 

XTP090 

A6E1 A6 8F 

LDX 

TELN+3 

A6E3 FO OC 

BEQ 

XTP010 

A6E5 BD 76 05 

LDA 

TEXBUF— 1 * X 

A6E8 C9 5C 

CMP 

4 '\ 

A6EA DO 05 

BNE 

XTP010 

A6EC C6 8F 

DEC 

TELN+3 

A6EE 4C F8 A6 

JMP 

XTP020 

A6F1 A9 9B 

XTP010 LDA 

#EOL 

A6F3 9D 77 05 

STA 

TEXBUF* X 

A6F6 E6 8F 

INC 

TELN+3 


i TYPE WITH 

WORD SPLIT AVOIDANC 

A6F8 84 AC 

XTP020 STY 

XTEMP+1 

A6FA A4 8E 

LDY 

TELN+2 

A6FC C4 8F 

CPY 

TELN+3 

A6FE FO 4A 

BEQ 

XTP080 

A700 84 AB 

XTP022 STY 

XTEMP 

A702 A6 55 

LDX 

COLCRS 

A704 AD 54 05 

LDA 

GRFLAG 

A707 FO 03 

BEQ 

XTP025 

A709 AE 91 02 

LDX 

TXTCOL 

A70C 86 AD 

XTP025 STX 

XTEMP+2 

A70E CA 

DEX 


A70F B 1 8C 

XTP030 LDA 

(TELN)* Y 

A71 1 E8 

INX 

. — , — — - — 

A71 2 C8 

I NY 


A713 C4 8F 

CPY 

TELN+3 

A715 FO 04 

BEQ 

XTP035 

A71 7 C9 20 

CMP 

#' 

A719 DO F4 

BNE 

XTP030 

A71B A4 AE 

XTP035 LDY 

XTEMP 

A71D E4 53 

CPX 

RMARGN 

A71F FO OB 

BEQ 

XTP040 

A721 90 09 

BCC 

XTP040 

A723 A5 AD 

LDA 

XTEMP+2 

A725 C5 52 

CMP 

LMARGN 

A727 FO 03 

BEQ 

XTP040 

A729 20 60 B8 

JSR 

NEWLIN 


i PROCESS TEXT EXPRESSION. 

i EXECUTE MODE? 
i NO. 

i CHECK FOR NULL TEXT, 
i NULL. 

NON-NULL — CHECK FINAL CHARACTER 
IS IT EOL SUPPRESS? 

NO. 


YES — SUPPRESS ALSO. 

INSERT EOL. 


V ic ? 


SAVE STATEMENT INDEX. 
STARTING INDEX. 

NULL OUTPUT — ALL DONE. 


SAVE INDEX. 

GET CURRENT CURSOR POSITION. 
DIFFERENT CURSOR IF SPLIT SCREEN. 


SPLIT SCREEN — USE OTHER CURSOR 

SAVE STARTING COLUMN #. 
PRE-CONDITION THE INDEX. 

FIND LENGTH OF NEXT WORD. 


; END OF TEXT. 
i SPACE? 

i NO — KEEP SCANNING. 


A72C B 1 8C 


XTP040 LDA 


(TELN), Y 


END OF WORD — CHECK FOR WORD SPLIT. 
DOES IT WRAP SCREEN? 

NO — OUTPUT IT. 

NO — OUTPUT IT. 

; YES — IS THIS THE 1ST WORD OF LINE? 

; YES — FORGET ABOUT NEW LINE. 

j NO — START A NEW LINE. 

; OUTPUT THE WORD JUST SCANNED. 




A72C B 1 8C 


XTP040 


LDA 


PILOT H. B STEWART 


A72E 

C9 

20 


CMP 

A730 

DO 

06 


BNE 

A732 

E4 

53 


CPX 

A734 

DO 

02 


BNE 

A736 

A9 

9B 


LDA 

A738 

20 

6F AF 

XTP050 

JSR 

A73B 

C8 



I NY 

A73C 

C4 

8F 


CP Y 

A73E 

FO 

OA 


BEQ 

A740 

88 



DEY 

A741 

B 1 

8C 


LDA 

A743 

CB 



I NY 

A744 

C9 

20 


CMP 

A746 

DO 

I 

E4 


BNE 

A748 

i 

FO 

B6 


BEQ 

A74A 

A4 

AC 

XTP080 

LDY 

A74C 

A9 

00 


LDA 

A74E 

60 


XTP090 

RTS 


; 'V" COMMAND 


A74F 

FO 

8B 

XTYPE2 

BEQ 

A751 

A5 

FD 


LDA 

A753 

DO 

87 


BNE 

A755 

FO 

06 


BEQ 




; 'N' COMMAND 

A757 

FO 

83 

XTYPE3 

BEQ 

A759 

A5 

FD 


LDA 

A75B 

FO 

F2 


BEQ 

A75D 



XREM 


A75D 

4C 

02 B8 

XTP400 

JMP 


( TELN > « Y 


# ' 

XTP050 

RMARGN 

XTP050 

#EOL 

CHOT 

TELN+3 

XTP080 

(TELN), Y 

#' 

XTP040 

XTP022 

XTEMP+1 

PROCESSOR 

XTYPE. 

MATCHF 
XTYPE 

XTP400 

PROCESSOR 

XTYPE 

MATCHF 

XTYPE2 

SCNEOL 


OUTPUT THE WORD JUST SCANNED 


SPACE? 

NO 

, YES — IS IT THE LAST POSITION? 
i NO. 

, YES — CHANGE TO EOL. 


) END OF TEXT? 
i YES. 

i SPACE? 

SPACE? 

\ NO — NOT END OF WORD. 

, YES — NOW DO NEXT WORD (BRA). 

} RESTORE STATEMENT INDEX, 
i SET CC FOR EXIT. 

; RETURN WITH CC SET. 


, SYNTAX SCAN ONLY *** SKIP BRANCH POINT *** 
; Y COMMAND (SAME AS # TY'>. 


; SYNTAX SCAN ONLY. 

; N COMMAND (SAME AS y TN'). 

; SKIP BRANCH TO 'XTYPE'. 

i REMARK COMMAND PROCESSOR TOO. 

. SCAN TO END OF LINE & RETURN WITH CC SET 


0 


PILOT 


H B STEWART 



i 




i XPOS 
# 

XPOS 

— POSITION COMMAND 

PROCESSOR 

A760 20 92 

B8 

JSR 

EXP 

i 

COLUMN NUMBER. 

A763 A5 92 



LDA 

EXEC 

i 

EXECUTE MODE? 

A765 FO OF 



BEQ 

XP0020 

i 

NO. 

A767 A5 94 



LDA 

EXPSTK+1 

i 

RANGE CHECK THE COLUMN #. 

A769 DO 24 



BNE 

XP0900 

i 

TOO LARGE. 

A76B A5 93 



LDA 

EXPSTK+O 



A76D C9 28 



CMP 

#TCOL 



A76F BO IE 



BCS 

XP0900 

i 

TOO LARGE. 

A77 1 85 55 



STA 

COLCRS 

i 

0. K. — STORE IT. 

A773 8D 91 

02 


STA 

TXTCOL 

i 

SPLIT SCREEN TOO. 

A776 20 EE 

B7 

XP0020 

JSR 

SKPSEP 

i 

SKIP SEPARATOR. 

A779 20 92 

B8 


JSR 

EXP 

t 

ROW NUMBER. 

A 77C A5 92 



LDA 

EXEC 

» 

EXECUTE MODE? 

A77E FO OE 



BEQ 

XP0090 

i 

NO. 

A780 A5 94 



LDA 

EXPSTK+1 

i 

RANGE CHECK THE ROW #. 

A782 DO OB 



BNE 

XP0900 

i 

TOO LARGE. 

A784 A5 93 



LDA 

EXPSTK+O 



A786 C9 IS 



CMP 

#TROW 



A788 BO 05 



BCS 

XP0900 

# 

TOO LARGE. 

A78A 85 54 



STA 

ROWCRS 

i 

0. K. — STORE IT. 

A78C A9 00 



LDA 

#0 

! 

SET CC FOR NORMAL EXIT. 

A78E 60 


XP0090 

RTS 


} 

RETURN WITH CC SET. 

A78F A9 02 


XP0900 

LDA 

#1 MPERR 

i 

COLUMN/ROW OUT OF RANGE 

A791 60 



RTS 


i 

RETURN WITH CC SET. 


PILOT 


H. B STEWART 


; XEND — END STATEMENT PROCESSOR 


I 


A792 

FO 

14 

XEND 

BEQ 

XEN090 

A794 

A6 

90 


LDX 

USTKP 

A796 

FO 

13 

• 

BEQ 

XEN095 

A798 

86 

FF 


STX 

RUN 

A79A 

CA 



DEX 


A79B 

CA 



DEX 


A79C 

86 

90 


STX 

USTKP 

A79E 

BD 

OB 05 


LDA 

USESTKi X 

A7A1 

85 

84 


STA 

NXTL.N 

A7A3 

BD 

OC 05 


LDA 

USESTK+1, X 

A7A6 

85 

85 


STA 

NXTLN+1 

A7A8 

A9 

00 

XEN090 

LDA 

#0 

A7AA 



XDS090 



A7AA 

60 



RTS 


A7AB 

20 

37 B2 

XEN095 

JSR 

CLOSEM 

A7AE 

84 

AB 


STY 

XTEMP 

A7B0 

20 

54 B2 


JSR 

REMDEV 

A7B3 

A4 

AB 


LDY 

XTEMP 

A7B5 

A9 

81 


LDA 

#ENDERR 

A7B7 

60 



RTS 



; SYNTAX SCAN ONLY. 

; USE STACK POINTER, 
i STACK EMPTY. 

; SET RUN MODE EVEN IF ALREADY SET 
; GET NEXT LINE ADDRESS FROM STACK 


i 0. K. — SET CC FOR EXIT. 


; CLOSE ALL OPEN FILES. 


; STOP CONDITION. 


'lOi Fc 











A7B8 

FO 

FO 


XDOS 

BEQ 

XDS090 

i SYNTAX 


A7BA 

EE 

FO 

02 


INC 

CRSINH 

i ENABLE 

# 

A7BD 

6C 

OA 

00 


JMP 

(DOSVEC) 

i YES 






PILOT 


H. B STEWART 


i XRUN 

i 


RUN COMMAND PROCESSOR 


A7C0 

FO 

20 


XRUN 

BEQ 

XRN090 


A7C2 

85 

FF 



STA 

RUN 

i 

A7C4 

20 

CE 

A9 


JSR 

XNV010 

i 

A7C7 

A5 

AE 



LDA 

S1L 

i 

A7C9 

85 

84 



STA 

NXTLN 


A7CB 

A5 

AF 



LDA 

S1L+1 


A7CD 

85 

85 



STA 

NXTLN+1 


A7CF 

20 

9A 

BA 


JSR 

GCL.EAR 

i 

A7D2 

20 

B9 

BE 


JSR 

GPINIT 

i 

\ 

A7D5 

84 

AB 



STY 

XTEMP 


A7D7 

20 

2F 

B8 


JSR 

NULACC 

; 

A7DA 

A4 

AB 



LDY 

XTEMP 


A7DC 

A9 

00 



LDA 

#0 

> 

A7DE 

85 

90 



STA 

USTKP 

j 

A7EO 

85 

FD 



STA 

MATCHF 

> 

A7E2 

60 



/ 

XRN090 

RTS 




SYNTAX SCAN ONLY. 

YES — ENTER RUN MODE. 

CLEAR ALL VARIABLES. 

SETUP THE NEXT LINE POINTER. 


CLEAR SCREEN. 

INITIALIZE GRAPHICS PARAMETERS. 


SET ACCEPT BUFFER TO NULL. 


MAKE MATCH FLAG FALSE . 
. . . USE STACK INDEX . . . 
... & SET CC ALSO. 


PILOT — H. B STEWART 


XACCPT — 


ACCEPT COMMAND PROCESSOR 


A7E3 20 

E7 

B7 

XACCPT 

JSR 

A7E6 DO 

06 



BNE 

A7E8 A9 

01 



LDA 

A7EA 85 

AB 



STA 

A7EC DO 

26 



BNE 

A7EE 20 

E8 

A4 

XAC003 

JSR 

A7F1 DO 

08 



BNE 






A7F3^85 

AB 



STA 

~A7F5 29 

9D 



AND 

A7F7 DO 

03 



BNE 

A7F9 A9 

02 



LDA 

A7FB 60 



XAC009 

RTS 


CHKEQS 

XAC003 

#NULL 

XTEMP 

XAC022 

ATOM 

XAC009 


i 'b»? 

i NO OR NOT YET 
i SETUP FOR NULL TARGET 
> (BRA). 

i CHECK FOR VARIABLE 
i ERROR. 


XTEMP 
#SVAR 
XAC020 

#IMPERR 


> SAVE ATOM TYPE. 
#SVAR+USVAR+NVAR+NULL+BPTR 

» VALID ATOM TYPE. 


A7FC 20 E7 B7 

fXAC020 


CHKEQS 

A 7FF FO 13 


^beq 

XAC022 

A801 A5 92 

^ 


LDA 

EXEC 

A803 FO F6 



BEQ 

XAC009 

A805 84 AC 



STY 

XTEMP+1 

A807 A2 OC 



LDX 

#TELN-DTAB 

A809 20 9E AF 



JSR 

GETLIN 

A80C C6 8F 



DEC 

TELN+3 

A80E 20 A8 B9 



JSR 

TRAILB 

A811 4C 40 A8 



JMP 

X AC 024 

A814 C8 

XAC022 

I NY 


A81 5 A5 AB 


k 

/LDA 

XTEMP 


A817 29 18 
A81 9 FO 03 

A81B 20 AO AB 

A81E A5 B6 
A820 85 F4 
A822 A5 B7 
A824 85 F5 

A826 20 43 B9 


A829 FO DO 

A82B 84 AC 
A82D A5 AB 
A82F 29 18 
A831 FO 03 

A833 20 EF AB 

A836 A4 AC 


AND 

BEQ 

JSR 


#SVAR+USVAR 
rAC02$\ 


SAVIT 


i *s* 


JSR 

LDA 

BEQ 


(^JSR 

XAC23B LDY 


POINT 

GNUMB 

POINT+1 

GNUMB+1 

TEXP 

EXEC 

XAC009 

XTEMP+1 

XTEMP 

#S VAR ■♦'US VAR 
XAC23B 

RE SIT 

XTEMP+1 


NONE OF THE ABOVE — ERROR. 
RETURN WITH CC SET. 


; CHECK FOR ASSIGNMENT OPTION. 

; YES. 

; EXECUTE MODE? 

; NO. 

; SAVE STATEMENT INDEX. 

; GET A LINE TO THE TEXP BUFFER 


; REMOVE EOL. 

; PROCESS UNDERSCORE IF PRESENT. 


i YES — SKIP OVER '='. 
i SEE IF TARGET IS A STRII 


-W 


SAVE 'POINT 7 . 


; EVALUATE TEXT EXPRESSION. 

i EXECUTE MODE? 
i NO. 

i YES — RESTORE 'NP'. 
i SEE IF TARGET IS A STRING? 


i NO. 




j YES — RESTORE 'NP' FROM 




PILOT — H. B. STEWART 


PILOT 


H B STEWART 


A838 A 5 F4 
A83A 83 B6 
A83C A3 F5 
A83E 85 B7 


A840 A3 8E 
A842 83 8A 
A844 AA 
A845 A8 

A846 A9 20 
A848 DO 16 

A84A E4 8F 
A84C FO 27 

A84E BD 77 05 
A851 E 8 

A852 CO FD 
A854 FO IF 


A856 C9 61 
A858 90 06 

A85A C9 7B 
A85C BO 02 

A85E 49 20 

A860 91 88 
A862 C8 

A863 C9 20 
A865 DO E3 


GNUMB 
POINT 
GNUMB* 1 
P0INT+1 


i RESTORE 'POINT' 



> SAVr ' ' ^ -Wv^xL 


XAC025 


CPX 

BEQ 

LDA 

INX 


XAC026 CPV 
BEQ 


TELN+3 

XAC030 

TEXBUF/ X 


#ACCLNG- 1 
XAC030 


CHARACTER CONVERSION HERE. 


CMP 

BCC 

CMP 

BCS 

EOR 

XAC027 STA 
I NY 

CMP 

BNE 


A867 E4 8F 

XAC028 

CPX 

A869 FO OF 


BEQ 

A86B BD 77 05 


LDA 

A86E E8 


INX 

A86F C9 20 


CMP 

A871 DO DF 


BNE 

A873 FO F2 


BEQ 

A875 A9 20 

XAC030 

LDA 

A877 91 88 


STA 

A879 C8 


I NY 

A87A 84 8B 

XAC031 

STY 

A87C A5 AB 


LDA 


# 'A+$20 
XAC027 

# 'Z+l+$20 
XAC027 

#$20 

( ACLN > , Y 


# ' 

XAC025 

TELN+3 

XAC031 

TEXBUF, X 

#' 

XAC026 

XAC028 

#' 

(ACLN), Y 


J DONE? 

J YES. 

i NO — GET NEXT CHAR. 


i ACCEPT BUFFER FULL. 


; LOWER CASE ALPHA? 
i NO. 


l NO. 

i YES — CONVERT TO UPPER CASE. 


; BLANK? 
i NO. 

; YES — SKIP MULTIPLES. 

; END OF TEXT. 

; GET NEXT CHARACTER. 

i 

; BLANK? 

; NO — STORE IT. 

; YES — IGNORE IT (BRA) 
; ADD TRAILING BLANK. 


ACLN+3 

XTEMP 


i E|4D INDEX. 

i CHECK PARAMETER TYPE AGAIN. 


PILOT 


H B STEWART 


s 



A87E C9 01 


CMP 

•NULL 


A880 FO 2F 


BEQ 

X AC 190 

a 

A882 29 84 


AND 

•NVAR + BP TR 


A884 DO 03 


BNE 

XAC100 

a 

A886 4C 91 AB 


JMP 

XCM300 


A889 AO FF 

X AC 100 

LDY 

• -1 

a 

A88B C8 

XAC1 10 

INY 



A88C B1 8C 


LDA 

( TELN ) , Y 

m 

A88E C9 9B 


CMP 

• EOL *“ 


A890 FO 09 


BEQ 

XAC120 


A892 C9 2D 


CMP 

• 


A894 FO 05 


BEQ 

XAC120 


A896 20 7 A B7 


JSR 

CNUMBR 


A899 BO FO 


BCS 

XAC1 10 


A89B A2 0 C 

XAC120 

LDX 

•TELN-DTAB 


A89D 20 B2 B6 


JSR 

ASCDEC 



A8A0 AO 00 
A8A2 A5 B8 
A8A4 91 B6 
A8A6 A5 AB 
A8A8 C9 80 
A8AA FO 05 

A8AC C8 
A8AD A5 B9 
A8AF 91 B6 

A8B1 A4 AC 
A8B3 A9 00 

A8B5 60 


LDY 

LDA 

STA 

LDA 

CMP 

BEQ 

INY 

LDA 

STA 

XAC190 LDY 
LDA 

RTS 


#0 

NUMBER 
(POINT) , Y 
XTEMP 
#BPTR 
XAC190 


NUMBER* 1 
(POINT), Y 

XTEMP+1 

#0 


» 


i NONE — ALL DONE 


i NUMERIC VARIABLE 


i STRING VARIABLE — GO TO COMMON CODE t RET 


i CONVERT NUMBER TO BINARY REPRESENTATION 


i SCAN TO NUMBER OR EOL 
i GET A CHAR 
i END OF LINE? ^ 
i YES — DONE 


r^P y TClkX-3 


i NO — MINUS SIGN^ 
i YES — DONE 


i NO — NUMERIC DIGIT? 
i NO — KEEP SCANNING 


i NOW CONVERT NUMBER WE FOUND. 


; MOVE VALUE TO VARIABLE. 

; SEE IF POINTER TO BYTE, 
i YES — ALL DONE. 


; RESTORE LINE POINTER. 
i SET CC FOR NORMAL EXIT. 

; RETURN WITH CC SET. 


/ 


PILOT 


H. B STEWART 


1 

; XMATCH — MATCH COMMAND PROCESSOR 


A8B6 B 1 80 

XMATCH 

LDA 

( I NLN ) » Y 

A8B8 C9 9B 


CMP 

#EOL 

A8BA DO 03 


BNE 

XMA010 

A8BC A9 02 


LDA 

# I MPERR 

A8BE 60 

XMA009 

RTS 


A8BF 20 43 B9 

XMA010 

JSR 

TEXP 


; *S* 

LDA 

EXEC 

A8C2 FO FA 


BEQ 

XMA009 

A8C4 A9 00 


LDA 

#0 

A8C6 85 FD 


STA 

MATCHF 

A8C8 A9 2C 


LDA 

# 

A8CA 85 E2 


STA 

MFDEL 

A8CC A5 8E 


LDA 

TELN+2 

A8CE C5 8F 


CMP 

TELN+3 

A8D0 FO 76 


BEQ 

XMA400 


; THROUGHOUT 

THE MAIN LOOP 

A8D2 A6 8A 


LDX 

ACLN+2 

A8D4 84 AC 


STY 

XTEMP+1 

A8D6 A4 8E 


LDY 

TELN+2 

A8D8 B 1 8C 


LDA 

( TELN ) i Y 

A8DA C9 7C 


CMP 

# ' ! 

A8DC DO 05 


BNE 

XMA050 

A8DE 85 E2 


STA 

MFDEL 

A8E0 C8 


I NY 


A8E1 DO OC 


BNE 

XMA060 

A8E3 B 1 8C 

XMA050 

LDA 

( TELN ) > Y 

A8E5 C9 IF 


CMP 

#CR IGHT 

A8E7 DO OC 


BNE 

XMA100 

A8E9 E8 


I NX 


A8EA C8 


I NY 


A8EB E4 8B 


CPX 

ACLN+3 

A8ED FO 59 


BEQ 

XMA400 

A8EF C4 8F 

XMA060 

CP Y 

TELN+3 

A8F 1 FO 55 


BEQ 

XMA400 

A8F3 DO EE 


BNE 

XMA050 

A8F5 84 AB 

XMA100 

STY 

XTEMP 

A8F7 84 A2 


STY 

TEMP+1 

A8F9 86 A1 


STX 

TEMP 

A8FB 86 8A 


STX 

ACLN+2 


i GET FIRST MATCH FIELD BYTE. 


i NULL MATCH FIELD IS ERROR 

i RETURN WITH CC SET. 

i EVALUATE TEXT EXPRESSION OPERAND. 

i EXECUTE MODE? 
i NO — DONE. 

i RESET MATCH FIELD NUMBER AND FLAG. 


i ' > ' IS DEFAULT MATCH FIELD DELIMITER 


i CHECK FOR NULL RESULT. 

i NULL PATTERN — NO MATCH. 

THE X REGISTER WILL = ACCEPT START INDEX. 

; ACCEPT BUFFER START INDEX, 
i SAVE INPUT INDEX. 

; SETUP MATCH PATTERN START INDEX. 

; CHECK FOR ALTERNATE FIELD DELIMITER. 

; NO ALTERNATE SPECIFIED. 

; SET ALTERNATE. 

; SKIP OVER VERTICAL BAR. 

; (BRA). 

i GET 1ST CHAR OF OPERAND. 

; RIGHT ARROW? 

; NO. 

; YES — SKIP FIRST CHAR IN ACCEPT BUFFER, 
i SKIP OVER RIGHT ARROW TOO. 

; NULL ACCEPT BUFFER? 

; YES — NO MATCH. 

; NULL OPERAND? 

; YES. 

; NO (BRA). 

; MAT pH DATA INDEX (INNER LOOP), 
i MATfH DATA INDEX (OUTER LOOP). 

I 

I 


PILOT 


H B STEWART 


A8FD E 6 FD 


INC 

MATC HF 

A 8FF A4 AB 

XMA120 LDY 

XTEMP 

A901 E 6 AB 


INC 

XTEMP 

A903 C4 8 F 


CP Y 

TELN+3 

A905 FO 37 


BEQ 

XMA300 

A907 B 1 8C 


LDA 

( TELN ) • Y 

A909 C5 E2 


CMP 

MFDEL 

A90B FO 31 


BEQ 

XMA300 

A90D A4 8A 


LDY 

ACLN+2 

A90F E 6 8A 


INC 

ACLN+2 

A91 1 C4 8B 


CP Y 

ACLN+3 

A913 FO 04 


BEQ 

XMA140 

A915 D 1 88 


CMP 

( ACLN ) i Y 

A917 FO E6 


BEQ 

XMA120 

A919 A5 A2 

XMA140 LDA 

TEMP-*- 1 

A91B 85 AB 


STA 

XTEMP 

A91D E6 A1 


INC 

TEMP 

A91F A5 A 1 


LDA 

TEMP 

A921 85 8A 


STA 

ACLN+2 

A923 C5 8B 


CMP 

ACLN+3 

A925 DO D8 


BNE 

XMA120 

A927 A4 A2 


LDY 

TEMP+1 

A929 B 1 8C 

XMA160 LDA 

(TELN), Y 

A92B C4 8F 


CPY 

TELN+3 

A92D FO 09 


BEQ 

XMA200 

A92F C8 


INY 


A930 C 5 E2 


CMP 

MFDEL 

A932 DO F5 


BNE 

XMA160 

A934 C4 8F 


CPY 

TELN+3 

A936 DO BD 


BNE 

XMA100 

A938 A9 00 

XMA200 

LDA 

#0 

A93A 85 FD 


STA 

MATCHF 

A93C FO OA 


BEQ 

XMA400 

A93E A5 A 1 

XMA300 

LDA 

TEMP 

A940 8D 73 05 


STA 

MATCHX 

A943 A5 8A 


LDA 

ACLN+2 

A945 BD 74 05 


STA 

MATCHX+1 

A948 A4 AC 

XMA400 

LDY 

XTEMP+1 

A94A A9 00 


LDA 

#0 

A94C 85 8A 


STA 

ACLN+2 

A94E 4C 02 B8 


JMP 

SCNEOL 


INCREMENT MATCH FIELD NUMBER. 

SEE IF ALL OF PATTERN HAS MATCHED. 

YES. 

NOT SURE. 

YES. 

NO — MORE DATA TO MATCH? 

NO — AT END OF BUFFER. 

YES — COMPARE DATA TO PATTERN. 

SO FAR SO GOOD. 

RESET MATCH PATTERN INDEX. 

INCREMENT 'ACCBUF' INDEX. 


INCREMENT ' TEXBUF ' INDEX TO NEXT FIELD. 

END OF MATCH PATTERN DATA? 

YES — NO MATCH. 


KEEP SCANNING. 

END OF MATCH STATEMENT? 

NO. 

NO MATCH — RESET FLAG. 

(BRA). 

SAVE START & END INDICES TO MATCH FIELD . . . 
... FOR ' XMWSP 0 . 

RESTORE INPUT LINE INDEX. 

CLEAR LINE INDEX. 







SCAN TO END OF INPUT LINE & RETURN. 


PILOT 


H B STEWART 


i XMWSP — MATCH WITH STRING PRODUCTION COMMAND PROCESSOR 


i 


A951 20 B6 A8 

XMWSP 

JSR 

XMATCH 

i 

FIRST DO ALL OF MATCH COMMAND. 

A954 DO 30 


BNE 

XMS090 

i 

SYNTAX ERROR. 

A956 A5 92 


LDA 

EXEC 

i 

EXECUTE MODE? 

A958 FO 2C 


BEG 

XMS090 

i 

NO — DONE (SYNTAX SAME AS MATCH). 

A95A A5 FD 


LDA 

MATCHF 

i 

WAS MATCH SUCCESSFUL? 

A95C FO 28 


BEG 

XMS090 

i 

NO — ALL DONE. 

A95E 84 AB 


STY 

XTEMP 



A960 8A 


TXA 


i 

NOW SET $LEFT = DATA FROM ACCEPT START 

A961 AC 73 05 


LDY 

MATCHX 

i 

... TO START OF MATCH - 1. 

A964 A2 00 


LDX 

#LFTSTG-STAB 



A966 20 87 A9 


JSR 

MAKSTG 



A969 DO 17 


BNE 

XMS080 

i 

ERROR. 

A96B AD 73 05 


LDA 

MATCHX 

/ 

THEN SET $MATCH = DATA FROM MATCH. 

A96E AC 74 05 


LDY 

MATCHX+1 



A97 1 A2 05 


LDX 

#MATSTG-STAB 



A973 20 87 A9 


JSR 

MAKSTG 



A976 DO OA 


BNE 

XMSOBO 

i 

ERROR. 

A978 AD 74 05 


LDA 

MATCHX+1 

i 

THEN BRIGHT = DATA FROM MATCH +1 . . . 

A97B A4 8B 


LDY 

ACLN+3 

j 

... TO END. 

A97D A2 OB 


LDX 

#R ITSTG-STAB 



A97F 20 87 A9 


JSR 

MAKSTG 



A982 08 

XMS080 

P HP 


i 

SAVE CC. 

A983 A4 AB 


LDY 

XTEMP 

j 

RESTORE INDEX. 

A985 28 


PLP 




A986 60 

XMS090 

RTS 


# 

RETURN WITH CC SET. 


A987 85 C4 
A989 84 C 5 
A98B A5 88 

MAKSTG STA 
STY 
LDA 

DP+2 

DP+3 

ACLN 

; DEFINE DATA PORTION. 

A98D 85 C2 

STA 

DP 


A98F A5 89 

LDA 

ACLN+1 


A991 85 C3 

STA 

DP+ 1 


A993 BD A9 A9 

LDA 

STAB, X 

; DEFINE NAME PORTION. 

A996 85 Cl 

STA 

NP+3 


A998 E8 

I NX 



A999 86 CO 

STX 

NP+2 


A99B A9 A9 

LDA 

#STAB 


A99D 85 BE 

STA 

NP 


A99F A9 A9 

LDA 

#STAB/256 


A9A1 85 BF 

STA 

NP + 1 


A9A3 20 9B B7 

JSR 

SETSVL 

; NAMED STRING VARIABLE LIST. 

A9A6 4C B8 B2 

JMP 

SINSRT 

; INSERT STRING & RETURN WITH CC SET. 


A9A9 


STAB=* 


; MATCH STRING NAME TABLE. 


PILOT 


H B STEWART 


A9A9 

05 

4C 

45 

LFTSTG . BYTE 

LSENDi “LEFT" 

A9AC 

0005 

46 

54 


LSEND=*-STAB 


A9AE 

OB 

4D 

41 

MATSTG . BYTE 

MSEND# "MATCH" 

A9B 1 
OOOB 

54 

43 

48 

MSEND=*-STAB 


A9B4 

1 1 

52 

49 

RITSTG . BYTE 

RSENDi "RIGHT" 

A9B7 

0011 

47 

48 

54 

RSEND=*-STAB 




PILOT 


H B. STEWART 


i 

i XNEWV — NEW VARIABLES COMMAND PROCESSOR 


A9BA 

20 

FA 

B7 

XNEWV 

JSR 

SLB 

A9BD 

20 

EO 

B7 


JSR 

CHKTRM 

A9C0 

FO 

OC 



BEQ 

XNV010 

A9C2 

C9 

23 



CMP 

# '# 

A9C4 

FO 

07 



BEQ 

XNV008 

A9C6 

C9 

24 



CMP 

# '% 

A9C8 

FO 

03 



BEQ 

XNV008 

A9CA 

A9 

02 



LDA 

#IMPERR 

A9CC 

60 




RTS 


A9CD 

C8 



XNV008 

I NY 



i *** EXTERNAL ENTRY POINT FROM 


A9CE 

85 

AB 


XNV010 

STA 

XTEMP 

A9D0 

A5 

92 



LDA 

EXEC 

A9D2 

FO 

21 



BEQ 

XNV090 

A9D4 

A5 

AB 



LDA 

XTEMP 

A9D6 

C9 

23 



CMP 

# '# 

A9D8 

FO 

OB 



BEQ 

XNV020 

A9DA 

A5 

B4 



LDA 

S2H 

A9DC 

85 

B2 



STA 

S2L 

A9DE 

A5 

B5 



LDA 

S2H+1 

A9E0 

85 

B3 



STA 

S2L+1 

A9E2 

20 

37 

B2 


JSR 

CLOSEM 

A9E5 

A5 

AB 


XNV020 

LDA 

XTEMP 

A9E7 

C9 

24 



CMP 

#'* 

A9E9 

FO 

03 



BEQ 

XNV080 

A9EB 

20 

3B 

B8 


JSR 

ZERVAR 

A9EE 

A5 

FF 


XNV080 

LDA 

RUN 

A9F0 

DO 

03 



BNE 

XNV090 

A9F2 

20 

33 

BF 


JSR 

RDYMES 

A9F5 




XNE090 



A9F5 

A9 

00 


XNV090 

LDA 

#0 

A9F7 

60 




RTS 



SKIP LEADING BLANKS. 
STATEMENT TERMINATOR? 

YES — NO OPERANDS IS VALID. 


; NUMERIC VARIABLES ONLY. 


» STRING VARIABLES ONLY. 

i IMPROPER OPERAND, 
i RETURN WITH CC SET. 


' XRUN ' & ' XNEW ' *** 

SAVE OPERAND. 

EXECUTE MODE? 

NO. 

GET OPERAND. 

CLEAR ONLY NUMERIC VARIABLES? 
YES — SKIP STRING VARIABLES. 

; CLEAR STRING VARIABLES. 


; CLOSE IOCBS 3 THROUGH 7. 

; GET OPERAND. 

; CLEAR ONLY STRING VARIABLES? 
i YES — SKIP NUMERIC VARIABLES. 

; ZERO NUMERIC VARIABLES & SET CC FOR EXIT. 
; RUN MODE? 

; YES — DON 'T PRINT 'READY ' . 

; NO — PRINT 'READY'. 


; SET CC FOR EXIT. 

; RETURN WITH CC SET. 


M B. STEWART 



PILOT — 


i XNEW — NEW PROGRAM PROCESSOR 


i 


A9F8 

FO 

FB 

XNEW 

BEG 

XNE090 

A9FA 

20 

FF A9 


JSR 

CLRPRG 

A9FD 

FO 

CF 


BEG 

XNV010 

A9FF 

A3 

AE 

CLRPRG 

LDA 

S1L 

AAOl 

83 

BO 


STA 

S1H 

AA03 

A3 

A F 


LDA 

S1L+1 

AA05 

85 

B1 


STA 

SI H+ 1 

AA07 

A9 

00 


LDA 

#0 

AA09 

85 

90 


STA 

USTKP 

AAOB 

60 



RTS 



i SYNTAX SCAN ONLY 
i CLEAR THE PROGRAM STORAGE AREA 
i (BRA) NOW CLEAR THE VARIABLES ALSO 

i YES — CLEAR PROGRAM STORAGE AREA 


i CLEAR USE STACK, 
i RETURN WITH CC AND A * ZERO 


i XCALL — CALL MEMORY LOCATION PROCESSOR 


i 


AAOC 20 92 B8 

XCALL 

JSR 

EXP 

AAOF A3 92 


LDA 

EXEC 

AA1 1 FO OE 


BEQ 

XCL090 

AA13 98 


TYA 


AA14 48 


PHA 


AA1 5 20 22 AA 


JSR 

XCL100 

AA1 8 68 


PLA 


AA 19 A8 


TAY 


AA1 A 58 


CLI 


AA1B D8 


CLD 


AA1C A9 00 


LDA 

#0 

AA1E 60 


RTS 


AA1F A9 02 

XCL080 

LDA 

#IMPERR 

AA21 60 

XCL090 

RTS 


AA22 6C 93 00 

XCL100 

JMP 

( EXPSTK 


; ADDRESS SHOULD FOLLOW 

i EXECUTE MODE? 

; NO. 

i SAVE THE LINE INDEX FOR THE USER. 


. "OFF WE GO/ INTO THE WILD BLUE YONDER 1 ’ 

; UNBELIEVEABLEi THE USER RETURNED. 

; RESTORE THE LINE INDEX. 

; JUST IN CASE! 

; DITTO. 

i SET CC FOR EXIT, 
i RETURN WITH CC SET. 

i ERROR. 

; RETURN WITH CC SET. 


; TOO LATE TO CHANGE YOUR MIND. 








PILOT 


H. B. STEWART 






t 

i XUSE 

— USE 

COMMAND PROCESSOR 


AA25 

FO 

21 


# 

XUSE 

BEQ 

X JMP 

; LET 7 X JMP 7 PERFORM SYNTAX CHECK. 

AA27 

A5 

FF 



LDA 

RUN 

; IF IMMEDIATE — DON'T PUT ANYTHING IN STACK. 

AA29 

FO 

19 



BEQ 

XUS100 


AA2B 

A6 

90 



LDX 

USTKP 

i USE STACK POINTER. 

AA2D 

EO 

10 



CPX 

#USTKSZ 


AA2F 

FO 

10 



BEQ 

XUS090 

; STACK FULL. 

AA31 

A5 

84 



LDA 

NXTLN 

; NEXT LINE ADDRESS TO USE STACK. 

AA33 

9D 

OB 

05 


STA 

USESTK/ X 


AA36 

A5 

85 



LDA 

NXTLN+1 


AA38 

9D 

OC 

05 


STA 

USESTK+1, X 


AA3E 

E8 




I NX 



AA3C 

E8 




I NX 



AA3D 

86 

90 



STX 

USTKP 


AA3F 

DO 

OC 



BNE 

XJP005 

; REST OF COMMAND IS JUST LIKE 7 J: 7 (BRA). 

AA4 1 

A9 

8B 


XUS090 

LDA 

#USOERR 

; STACK OVERFLOW ERROR. 

AA43 

60 




RTS 



AA44 

85 

90 


XUS 100 

STA 

USTKP 

i CLEAR USE STACK. 

AA46 

FO 

05 



BEQ 

XJP005 

; (BRA). 


PILOT 


H. B STEWART 


i 


i XJMP — JUMP COMMAND PROCESSOR 

- 


AA40 

DO 

03 

XJMP 

BNE 

XJP005 

i 

AA4A 

4C 

Cl B7 


JMP 

SCNLBL 

i 



i *** EXTERNAL 

ENTRY POINT 

(FROM 

AA4D 20 FA B7 

XJP005 JSR 

SLB 


A A 50 C8 

I NY 

i 

i 

AA51 84 C4 

STY 

DP +2 

AA53 20 B9 B7 

JSR 

SCEOA 

i 

AA56 84 C 5 

STY 

DP +3 

AA58 A5 80 

LDA 

INLN 


AA5A 85 C2 

STA 

DP 


AA5C A5 81 

LDA 

INLN+1 


AA5E 85 C3 

STA 

DP + 1 


AA60 20 92 B7 

JSR 

STMLST 

# 

AA63 84 AB 

STY 

XTEMP 

i 

AA65 A2 3A 

XJP030 LDX 

#LP-DTAB 

j 

AA67 20 9D B3 

JSR 

SEND 


AA6A FO 36 

BEQ 

XJP200 

) 

AA6C AO 06 

LDY 

#6 

i 

AA6E B1 BA 

LDA 

(LP)i Y 


AA70 C9 2A 

CMP 

# '* 


AA72 DO 26 

BNE 

XJP060 

i 

AA74 C8 
AA75 84 Ce 

I NY 
STY 

MP+2 

i 

AA77 B1 BA 

XJP040 LDA 

( L.P ) / Y 

j 

AA79 CB 

I NY 



AA7A 20 A4 B7 

JSR 

CKEOA 

j 

AA7D DO F8 

BNE 

XJP040 

i 

AA7F 88 

DEY 



AA80 84 C9 

STY 

MP+3 


AA82 A5 BA 

LDA 

LP 

j 

AA84 85 C6 

STA 

MP 

i 

AA86 85 84 

STA 

NXTLN 

# 

AA88 A5 BB 

LDA 

LP + 1 


AA8A 85 C7 

STA 

MP+1 


AA8C 85 85 

STA 

NXTLN+1 


AA8E 20 F8 B2 

JSR 

SCOMP 

# 

AA91 DO 07 

BNE 

XJP060 

# 

AA93 A4 AB 

LDY 

XTEMP 

# 

AA95 84 FF 

STY 

RUN 


AA97 A9 00 

LDA 

#0 


AA99 60 

RTS 


j 

AA9A A2 3A 

XJP060 LDX 

#LP-DTAB 

# 


PILOT 


H. B. STEWART 


EXECUTE MODE 

SCAN OVER LABEL & RETURN. 

XJMPM' «< ' XUSE * ) *** 

SKIP OVER 

SETUP 'DP' TO POINT TO JUMP LABEL 
SCAN TO END OF LABEL. 


SETUP TO SCAN STATEMENT LIST. 

SAVE INPUT LINE POINTER. 

CHECK FOR END OF STATEMENT LIST. 

END OF LIST — LABEL NOT FOUND. 

CHECK FOR PRESENCE OF LABEL. 

NO — TRY NEXT STATEMENT. 

YES — SETUP 'MP' TO POINT TO STATEMENT LABEL. 

SCAN TO END OF LABEL. 

END OF ATOM (LABEL)? 

NO. 


SETUP POINTERS FOR . . . 

. . . 'SCOMP ' CALL . . . 

. . . & STATEMENT TO EXECUTE. 


COMPARE LABELS. 

NO MATCH. 

RESTORE INPUT LINE POINTER. 

SET RUN MODE EVEN IF ALREADY SET. 

RETURN WITH CC SET. 


GET POINTER TO NEXT STATEMENT. 


AA99 60 


RTS 


AA9A A2 3A XJP060 LDX #LP-DTAB 


PILOT — 

H. B. 

STEWART 



AA9C 

20 

10 B4 

JSR 

SNXTI 

AA9F 

4C 

65 AA 

JMP 

XJP030 

AAA2 

A4 

C4 

XJP200 LDY 

DP+2 

AAA4 

A9 

OA 

LDA 

#UNDERR 

AAA6 

60 


RTS 



RETURN WITH CC SET. 

GET POINTER TO NEXT STATEMENT. 


RESTORE LINE INDEX. 
UNDEFINED LABEL. 
RETURN WITH CC SET. 



-VMS 


r 


PILOT — H. B. STEWART 


; XJMPM — JUMP ON MATCH RESULT COMMAND PROCESSOR 


i EXECUTE MODE 


AAA7 

DO 

OC 


XJMPM 

BNE 

XJM030 

AAA9 

20 

Cl 

B7 


JSR 

SCNLBL 

AAAC 

DO 

26 



BNE 

XJM090 

AAAE 

20 

Cl 

B7 

XJM010 

JSR 

SCNLBL 

AAB 1 

FO 

FB 



BEQ 

XJM010 

AAB3 

DO 

ID 



BNE 

XJM050 

AAB 5 

A5 

FD 


XJM030 

LDA 

MATCHF 

AAB7 

FO 

11 



BEQ 

XJM043 

AAB9 

AA 




TAX 


AAB A 

CA 



XJM040 

DEX 


AABB 

DO 

10 



BNE 

XJM045 

AABD 

20 

EE 

B7 


JSR 

SKPSEP 

AACO 

20 

EO 

B7 


JSR 

CHKTRM 

AAC3 

FO 

OF 



BEQ 

XJM090 

AAC5 

20 

4D 

AA 


JSR 

XJP005 

AAC8 

DO 

OA 



BNE 

XJM090 

A AC A 

4C 

02 

B8 

XJM043 

JMP 

SCNEOL 

AACD 

20 

Cl 

B7 

XJM045 

JSR 

SCNLBL 

AADO 

FO 

ES 



BEQ 

XJM040 

AAD2 

A9 

00 


XJM050 

LDA 

#0 

AAD4 




XDU090 



AAD4 

60 



XJM090 

RTS 










i SCAN OVER FIRST LABEL 
• NOT EVEN ONE LABEL — ERROR 

i SCAN OVER REMAINING LABELS 


i NORMAL RETURN. 

i WAS PREVIOUS MATCH SUCCESSFUL? 
i NO — NO JUMP. 

i YES — USE FIELD # AS LOOP COUNT. 

; NOT THERE YET. 

; PRE— VALIDATE NEXT LABEL. 

; END OF STATEMENT? 
i YES — 0. K. 

; LET ' X JMP ' DO THE DIRTY WORK. 

; ERROR. 

i SCAN TO END OF STATEMENT & RETURN. 

; SCAN OVER LABEL. 

; THERE WAS ONE THERE. 


TOO FEW LABELS IS O. K. 


; RETURN WITH CC SET. 














PILOT — H. B. STEWART 




PILOT — H. B. STEWART 


AAD5 FO FD 
AAD7 84 AC 


AAD9 CE FE 02 


AAF7 A9 3D 
AAF9 20 6F AF 

AAFC A9 27 
AAFE 20 6F AF 

AB01 20 IF AB 

AB04 A9 27 
AB06 20 6F AF 
AB09 20 60 B8 

ABOC A2 3A 
ABOE 20 10 B4 
ABU 4C DF AA 


XDUMP — STRING S. NUMERIC VARIABLE DUMP COMMAND PROCESSOR 

i SYNTAX SCAN. 

. YES — SAVE INPUT LINE INDEX. 
; CLEAR SCREEN. 


XDUMP 


BEQ 

XDU090 

STY 

XTEMP+ 1 

. IF 

DEBUG 

LDA 

#CLEAR 

JSR 

CHOT 

. ENDIF 
DEC 

DSPFLG 


SET DISPLAY CONTROL CHARS FLAG 


DUMP ALL OF THE STRING VARIABLES 


. IF 
LDA 
JSR 
JSR 

. ENDIF 


DEBUG 

#16 

MESSOT 

NEWLIN 


AADC 

20 

9B 

B7 


JSR 

SETSVL 

AADF 

AAE1 

AAE4 

A2 

20 

FO 

3A 

9D 

2E 

B3 

XDU005 

LDX 

JSR 

BEQ 

#LP-DTAB 

SEND 

XDU080 

AAE6 

AAE8 

AAEA 

A2 

AO 

20 

38 

3A 

CF 

B3 


LDX 

LDY 

JSR 

#NUMBER-DTAB 

#LP-DTAB 

DMOVI 

AAED 

AAEF 

A9 

20 

24 

6F 

AF 


LDA 

JSR 

#'$ 

CHOT 

AAF2 

AAF4 

AO 

20 

02 

IF 

AB 


LDY 

JSR 

#2 

PRTSFD 

AAF7 




XDU020 

. IF 
JSR 

DEBUG 

PRTEQS 


. ENDIF 
. IF 
LDA 
JSR 

. ENDIF 

LDA 

JSR 

JSR 


XDU040 LDA 
JSR 
JSR 


DEBUG-1 
#' = 
CHOT 

#' ' 

CHOT 

PRTSFD 

#' ' 

CHOT 

NEWLIN 


ldx #lp-dtab 

JSR SNXTI 

jMP XDU005 

,, , nc THF NON-ZERO NUMERIC VARIABLES 


PRODUCE STRING VARIABLE HEADER. 


POINT TO STRING LIST. 

END OF STRING STORAGE? 

YES — DONE. 

MOVE STRING POINTER TO NUMBER 


PREFIX NAME WITH '$'• 

J PRINT STRING NAME. 

i SEPARATE NAME AND DATA WITH 

i SEPARATE NAME AND DATA WITH 

; DELIMIT STRING DATA WITH 

i PRINT STRING DATA, 
j CLOSING DELIMITER, 
i END OF STRING, 
i INCREMENT TO NEXT STRING. 


AB14 20 60 B8 


XDU080 JSR 


NEWLIN 


r 


PILOT — MB STEWART 


XDU082 


XDU085 


XDU087 


. IF 

DEBUG 

LDA 

• 17 

JSR 

ME S SOT 

JSR 

NEWLIN 

LDY 

•0 

LDA 

VARTAB, Y 

STA 

NUMBER 

LDA 

VARTAB* l » Y 

STA 

NUMBER* 1 

ORA 

NUMBER 

BEQ 

XDUO05 

LDA 

• '• 

JSR 

CHOT 

TYA 

LSR 

A 

ADC 

# 'A 

JSR 

CHOT 

JSR 

PRTEQS 

LDX 

•NUMBER-DTAB 

JSR 

DEC ASC 

JSR 

SPACES 

I NY 
INY 

CPY 

#52 

BNE 

XDU082 

JSR 

NEWLIN 

JSR 

NEWLIN 

THE CONTENT OF THE USf 

LDA 

#18 

JSR 

MESSOT 

JSR 

NEWLIN 

LDX 

USTKP 

BEQ 

XDU088 

JSR 

SPACE 

LDA 

USESTK— 2< X 

STA 

POINT 

LDA 

USESTK—1 / X 

STA 

POINT+1 

JSR 

GTLNNO 

STX 

XTEMP 

LDX 

#L INENO-DTAB 

JSR 

DECASC 

LDX 

XTEMP 

DEX 

DEX 

BNE 

XDU087 

JSR 

NEWLIN 


numeric variable header 


MOVE VARIABLE VALUE TO NUMBER' 


j TEST FOR ZERO VALUE 
i ZERO — DON'T PRINT 


i PRODUCE VARIABLE NAME 


i VALUE. 


i BUMP INDEX TO NEXT VARIABLE. 

i DONE? 
i NO. 


STACK 

; PRODUCE USE STACK HEADER 


; STACK EMPTY? 

; YES. 

i NO — PRINT LINE #<S). 

; GET POINTER TO STORED LINE. 


; EXTRACT LINE NUMBER. 
; PRINT LINE NUMBER. 


MORE TO PRINT. 


PILOT 


H. B. STEWART 


JSR 


NEWLIN 


PILOT — H. B. STEWART 


XDU088 JSR NEWLIN 

; DUMP THE GRAPHICS PARAMETERS 


LDA 

#19 

JSR 

MESSOT 

JSR 

NEWLIN 

LDA 

# 'X 

JSR 

CHOT 

JSR 

PRTEGS 

LDX 

#GX-DTAB 

JSR 

DECASC 

JSR 

SPACES 

LDA 

# 'Y 

JSR 

CHOT 

JSR 

PRTEGS 

LDX 

#GY-DTAB 

JSR 

DECASC 

JSR 

SPACES 

LDA 

#20 

JSR 

MESSOT 

LDX 

#THETA-DTAB 

JSR 

DECASC 

JSR 

NEWLIN 


i REPORT ON FREE MEMORY 


JSR NEWLIN 

LDA #21 

JSR MESSOT 

LDY #S2L-DTAB 

JSR DLOADA 

LDY #S1H-DTAB 

JSR DSUBA 

LDA #1 

JSR DADDS 

JSR DECASC 

JSR NEWLIN 

. END IF 


AB 1 7 

EE 

FE 02 

INC 

DSPFLG 

AB 1 A 

A4 

AC 

LDY 

XTEMP+1 

ABIC 

ABIE 

A9 

60 

00 

LDA 

RTS 

#0 


. IF 

DEBUG 

PRTEGS LDA 

# 7 = 

JMP 

CHOT 

. END IF 



AB IF B 1 B8 


PRTSFD LDA 


(NUMBER)/ Y 


; PRODUCE GRAPHICS HEADER. 


; X=FLOOR ( <VALUE> ) . 

. / / 

i — 


; Y=FL.OOR ( CVALUE> ) . 

. / — ✓ 
f — 


; THETA=<VALUE>. 


; FREE MEMORY = <VALUE>. 


; <VALUE> = 'S2L' - 'S1H' + 1. 


; PRINT RESULT. 


RESET DISPLAY CONTROL CHARS FLAG. 
DONE — RESTORE INPUT LINE INDEX. 
SET CC FOR EXIT. 

RETURN WITH CC SET. 


; PRINT '=' . . . 
i ... ^ RETURN. 


; GET NAME/DATA LENGTH. 


r»*ss Forms, In 


PILOT 


H. B. STEWART 


AB21 

AA 



TAX 



AB22 

FO 

12 


BEQ 

PFD090 

} DONE. 

AB24 

C8 


PFD010 

I NY 



AB25 

DO 

02 


BNE 

PFD020 


AB27 

E6 

B9 


INC 

NUMBER+1 

i INDEX WRAPAROUND 

AB29 

B 1 

B8 

PFD020 

LDA 

(NUMBER ) > Y 

i GET CHARACTER. 

AB2B 

20 

6F AF 


JSR 

CHOT 

; DONE? 

AB2E 

CA 



DEX 

PFD010 

AB2F 

DO 

F3 


BNE 

» NO. 

AB31 

C8 



I NY 

PFD090 

i YES. 

AB32 

DO 

02 


BNE 


AB34 

E6 

B9 


INC 

NUMBER+1 

; INDEX WRAPAROUND 

AB36 

60 


PFD090 

RTS 




— BUMP POINTER 
































i i n 


CTrUADT 


I 


PILOT 


H. B STEWART 


COMPUTE COMMAND PROCESSOR 


AB37 20 E8 

A4 

XCMPUT 

JSR 

ATOM 

AB3A DO 63 



BNE 

XCM900 

AB3C C9 04 



CMP 

#NVAR 

AB3E FO OB 



BEQ 

XCM100 

AB40 C9 80 



CMP 

#BPTR 

AB42 FO 07 



BEQ 

XCM100 

AB44 29 18 



AND 

#SVAR+USVAR 

AB46 DO 36 



BNE 

XCM200 

AB48 A9 02 


XCM092 

LDA 

#IMPERR 

AB4A 60 



RTS 




; ARITHMETIC 

ASSIGNMENT 

AB4B 85 AB 


XCM100 

STA 

XTEMP 

AB4D 20 E7 

B7 


JSR 

CHKEQS 

AB50 DO F6 



BNE 

XCM092 

AB52 A5 B6 



LDA 

POINT 

AB54 48 



PHA 


AB55 A5 B7 



LDA 

POINT+1 

AB57 48 



PHA 


AB58 C8 



I NY 


AB59 20 92 

B8 


JSR 

EXP 

AB5C 68 



PLA 


AB5D 85 B7 



STA 

POINT+1 

AB5F 68 



PLA 


AB60 85 B6 



STA 

POINT 

AB62 A5 92 



LDA 

EXEC 

AB64 FO 39 



BEQ 

XCM900 

AB66 84 AC 



STY 

XTEMP+1 

AB68 AO 00 



LDY 

#0 

AB6A A5 93 



LDA 

EXPSTK 

AB6C 91 B6 



STA 

(POINT), Y 

AB6E A5 AB 



LDA 

XTEMP 

AB70 C9 80 



CMP 

#BPTR 

AB72 FO 05 



BEQ 

XCM120 

AB74 Ce 



I NY 


AB75 A5 94 



LDA 

EXPSTK+1 

AB77 91 B6 



STA 

(POINT), Y 

AB79 A4 AC 


XCM120 

LDY 

XTEMP+1 

AB7B A9 00 



LDA 

#0 

AB7D 60 



RTS 



; STRING ASSIGNMENT 


I 


CHECK FOR TARGET VARIABLE. 
INVALID ATOM. 


NUMERIC ASSIGNMENT. 

BYTE POINTER? 

YES — SAME AS NUMERIC VARIABLE. 

STRING ASSIGNMENT? 

YES. 

NO — ERROR. 


SAVE TARGET TYPE. 

CHECK FOR ASSIGNMENT OPERATOR NEXT. 
ASSIGNMENT SYNTAX ERROR. 

SAVE TARGET ADDRESS. 


PREPARE TO EVALUATE EXPRESSION. 
EVALUATE EXPRESSION. 

RESTORE TARGET ADDRESS. 


EXECUTE MODE? 

NO. 

SAVE LINE INDEX. 

STORE RESULT TO TARGET. 

SEE IF TARGET IS POINTER TO BYTE. 
YES — ALL DONE. 

NO — NOW MSB. 

RESTORE LINE INDEX. 


COMPUTE WAS A SUCCESS. 


PILOT 


H B STEWART 


AB7E 20 E7 B7 
AB81 DO C5 

AB83 20 AO AB 

AB86 C8 
AB87 20 43 B9 


AB8A FO 13 

AB8C 84 AC 
AB8E 20 EF AB 


AB91 A2 42 
AB93 AO OC 
AB95 20 C 5 B3 

AB98 20 B8 B2 
AB9B 08 
AB9C A4 AC 
AB9E 28 

AB9F 60 


XCM200 JSR 
BNE 

JSR 

I NY 
JSR 

i *S* LDA 
BEQ 


CHKEQS 

XCM092 


i ASSIGNMENT OPERATOR? 
t NO — ERROR 

V bjf 


i 


EXEC 

XCM900 


i SKIP OVER 

i EVALUATE TEXT EXPRESSION 

i EXECUTE MODE? 
i NO — DON'T DO ASSIGNMENT 


STY 

JSR 


XTEMP+1 

RESIT 


i RESTORE 'NP' FROM 'MR 
i *** EXTERNAL ENTRY POINT FROM 'XACCPT' *** 


‘••W » fAf * 


XCM300 LDX 
LDY 
JSR 

/T 

JSR 
PHP 
LDY 
PLP 

XCM900 RTS 



ABAO A5 92 
ABA2 FO 40 

ABA4 98 
ABA5 48 

ABA6 A5 BO 
ABAS 85 D2 
ABAA 85 C6 
ABAC A5 B 1 
ABAE 85 D3 
ABBO 85 C7 

ABB2 A9 01 
ABB4 85 D4 

ABB6 85 D5 

ABB8 20 27 B4 
ABBB DO 2 F 

ABBD AO 02 
A BBF 84 C8 
ABC 1 84 C9 

ABC3 A4 CO 
ABCS C4 Cl 
ABC7 FO 1C 

ABC9 C4 Cl 


SAVIT 


LDA 

BEQ 

TYA 

PHA 


EXEC 

SAV090 




JSR 

BNE 


SAV010 CPY 


S1H 

MEMA 

MP 

S1H+1 
MEMA+1 
MP + 1 

#257 

MEMB 

#257/256 

MEMB+1 

MALLOC 

SAV190 

#2 

MP+2 

MP+3 

NP+2 

NP+3 

SAV100 

NP+3 


; EXECUTE MODE? 
j NO. 

; SAVE Y REGISTER 


; 'MEMA' = 'S 1H ' . 

; 'MP' = ' S 1 H ' ALSO. 


'MEMB ' = 257. 






; #** ALL THIS JUST FOR OVERFLOW TEST??? *** 


TARGET STRING START INDEX. 


SOURCE STRING START INDEX. 
NULL SOURCE? 

YES — ERROR. 

i END OF STRING? 


PILOT 


H. B. STEWART 


ABC9 C4 Cl 


SAV010 


PILOT — H B STEWART 


ABCB FO 19 


ABCD 

B 1 

BE 


ABCF 

C8 



ABDO 

84 

A 1 


ABD2 

20 

A4 B7 


ABD9 

FO 

OE 


ABD7 

A4 

C9 


ABD9 

91 

C6 


ABDB 

C8 



ABDC 

84 

C9 


ABDE 

A4 

A 1 


ABEO 

DO 

E7 


ABE2 

68 


SAV080 

ABE3 

A8 



ABE4 

60 


SAV090 

ABE9 

20 

EF AB 

SAV100 

ABE8 

68 



ABE9 

A8 



ABEA 

A9 

82 


ABEC 

4C 

6C A 1 

SAV190 

ABEF 

A9 

C6 

RESIT 


ABF1 89 BO 
ABF3 A9 C7 
ABF9 89 B 1 


ABF7 A2 3E 
ABF9 AO 46 
ABFB 4C C9 B3 


CPY NP+3 


BEQ 

SAV080 

1 

LDA 

(NP), Y 

i 

I NY 



STY 

TEMP 


JSR 

CKEOA 

j 

BEQ 

SAV100 

1 

LDY 

MP+3 

i 

STA 

(MP ), Y 


1 NY 



STY 

MP+3 


LDY 

TEMP 


BNE 

SAV010 

i 

PLA 


j 

TAY 



RTS 



JSR 

RESIT 

t 

PLA 


i 

TAY 



LDA 

4ATMERR+NS 

l 

JMP 

PSTOP 

l 


LDA 

MP 

\ 

STA 

SI H 


LDA 

MP + 1 


STA 

S 1 H+ 1 


LDX 

#NP-DTAB 

) 

LDY 

#MP~DTAB 


JMP 

PMOVE 

j 


END OF STRINO? 


YES 

NO — GET A CHAR. 


END OF ATOM (STRING NAME)? 
YES — ERROR 

STORE A CHAR 


TRY AGAIN (BRA). 

RESTORE Y REGISTER. 

UNDO WHAT WE DID. 

RESTORE Y REGISTER. 

INVALID STRING NAME. 

ABORT COMMAND. 

DEALLOCATE TEMPORARY MEMORY. 


RESTORE 'NP' FROM 'MP' ... 
. . . & RETURN. 



PILOT 


H B STEWART 


t 

i XGRAPH — GRAPHICS COMMAND PROCESSOR 




ABFE 

A5 

92 


XGRAPH 

LDA 

EXEC 

AC 00 

FO 

08 



BEQ 

XGR020 

AC 02 

AD 

54 

05 


LDA 

GRFLAG 

AC05 

DO 

03 



BNE 

XGR020 

AC 07 

20 

D5 

AF 


JSR 

GSOPEN 

ACOA 

20 

19 

AC 

XGR020 

JSR 

GCOMND 

ACOD 

20 

FA 

B7 


JSR 

SLB 

AC 10 

C8 




INY 


AC 11 

C9 

3B 



CMP 

# 'i 

AC 13 

FO 

E9 



BEQ 

XGRAPH 

AC 15 

88 




DEY 


AC 1 6 

A9 

00 



LDA 

#0 

AC 18 

60 




RTS 



i EXECUTE MODE? 
i NO 

i YES — GRAPHICS SCREEN OPEN? 
i YES. 

i NO — OPEN GRAPHICS SCREEN 
» PROCESS ONE GRAPHICS SUB-COMMAND 
i SEE IF MULTIPLES. 


i YES. 

i NO — ALL DONE. 

; CLEAR CC FOR NORMAL EXIT. 
; RETURN WITH CC SET. 


AC 1 9 20 FA B7 
AC 1C C9 28 
AC IE FO 22 

AC20 20 E8 A4 
AC23 DO 1A 

AC25 29 86 
AC27 DO 2A 

AC29 A2 97 
AC2B 20 10 A3 
AC2E DO OF 

AC30 BD 2F A4 
AC 33 8D 06 05 
AC 36 BD 30 A4 
AC39 8D 07 05 

AC3C 4C 05 05 

AC3F 4C 6C A1 


. 'GCOMND ' PROCESS ONE GRAPHICS SUB-COMMAND OR NESTED GROUP. 


GCOMND 


GCM090 


JSR 

SLB 

} 

CMP 

# ' ( 

i 

BEQ 

GCM100 


JSR 

ATOM 

f 

BNE 

GCM090 

i 

AND 

#NUM+NVAR+BPTR 

# 

BNE 

GCM200 

# 

LDX 

#GT AB— CT AB 

« 

JSR 

CMATCH 


BNE 

GCM090 

j 

LDA 

CDTAB, X 

i 

STA 

GJUMP+i 


LDA 

CDTAB+1, X 


STA 

GJUMP+2 


JMP 

GJUMP 

i 

JMP 

PSTOP 

$ 


SKIP LEADING BLANKS. 

CHECK FOR GROUPING WITH 

CHECK ATOM TYPE. 

ATOM ERROR. 

IF NUMERIC, THEN TREAT AS ITERATION COUNT. 
YEP. 

NQ — ASSUME ITS A SUB-COMMAND. 

NO — ERROR. 

SETUP ADDRESS OF G-RQUTINE. 


GO TO G-ROUTINE & RETURN. 

FATAL ERROR — STOP EXECUTION. 




; THIS SECTION HANDLES NESTED GROUPS. 


AC42 C8 GCM100 

AC43 20 FE AB 

AC46 20 FA B7 
AC49 C8 
AC4A C9 29 
AC4C FO 4C 

AC4E 88 
AC4F A9 02 


INY 

JSR 

XGRAPH 

# 

I 

JSR 

INY 

SLB 


CMP 

# ' ) 

i 

BEQ 

GCM390 

# 

DEY 

LDA 

#NSTERR 

i 


SKIP OVER ' < 

PROCESS ONE SUB-COMMAND 


OR NESTED GROUP. 


MATCHING PAREN? 
YES — 0. K. 


NO — ERROR. 


PILOT 


H. B. STEWART 



AC4E 88 
AC4F A9 02 


DEY 

LDA 


#NSTERR 


i NO 


ERROR 


PILOT — H. B STEWART 


AC 51 

DO 

EC 



BNE 

GCM090 





; THIS 

SECTION 

HANDLES I 

AC 53 

A5 

92 


GCM200 

LDA 

EXEC 

AC55 

FO 

36 



BEQ 

GCM300 

AC 57 

A5 

B8 



LDA 

NUMBER 

AC 59 

05 

B9 



ORA 

NUMBER+1 

AC5B 

FO 

30 



BEQ 

GCM300 

AC5D 

A5 

DE 



LDA 

LS 

AC5F 

48 




PHA 


AC60 

A5 

DF 



LDA 

LS+1 

AC62 

48 




PHA 


AC63 

98 




TYA 


AC64 

48 




PHA 


AC65 

A5 

B8 



LDA 

NUMBER 

AC67 

85 

DE 



STA 

LS 

AC69 

A5 

B9 



LDA 

NUMBER+1 

AC6B 

85 

DF 



STA 

LS+1 

AC6D 

20 

19 

AC 

GCM220 

JSR 

GCOMND 

AC70 

A2 

5E 



| DX 

#LS-DTAB 

AC72 

A9 

FF 



/lda 

#-i 

AC 74 

20 

4D 

B6 


VjJSR 

DADDS _J 

AC 77 

A5 

DE 



lda 

rsr" 

AC79 

05 

DF 



ORA 

LS+1 

AC7B 

FO 

08 



BEQ 

GCM240 

AC7D 

20 

46 

B8 


JSR 

ABRTCK 

AC80 

68 




PLA 


AC 81 

48 




PHA 


AC82 

A8 




TAY 


AC83 

DO 

E8 



BNE 

GCM220 

AC85 

68 



GCM240 

PLA 


AC86 

68 




PLA 


AC87 

85 

DF 



STA 

LS+1 

AC89 

68 




PLA 


AC8A 

85 

DE 



STA 

LS 

AC8C 

60 




RTS 






; THIS 

SECTION 

SYNTAX SC 

AC8D 

A5 

92 


GCM300 

LDA 

EXEC 

AC8F 

48 




PHA 


AC90 

A9 

00 



LDA 

#0 

AC92 

85 

92 



STA 

EXEC 

AC94 

20 

19 

AC 


JSR 

GCOMND 

AC97 

68 




PLA 


AC 98 

85 

92 



STA 

EXEC 

AC 9 A 

60 



GCM390 

RTS 



i (BRA). 

IS 

i EXECUTE MODE? 
i NO — SYNTAX SCAN ONLY. 

; SEE IF ZERO ITERATIONS. 

i YES — SCAN OVER ITERATION BODY. 

i NO — SAVE COUNTER ('LS') ... 

i ... St LINE INDEX, 
i GET LOOP COUNT TO 'LS'. 


PROCESS ONE COMMAND. 
DECREMENT ITERATION COUNT. 




CHECK FOR RESULT = 0. 

DONE. 

CHECK FOR OPERATOR ABORT. 

NOT DONE — RESTORE SCAN INDEX 

; (BRA) EXECUTE BODY AGAIN. 

i THROW AWAY STARTING INDEX. 

; RESTORE 'LS'. 


SYNTAX SCANS THE BODY OF AN ITERATION. 

; SAVE CURRENT VALUE. 

; SETUP FOR SCAN ONLY 


; **# RECURSIVE CALL *** 

; RESTORE MODE. 

i RETURN WITH CC SET. 


DDOUL 



PILOT — H B. STEWART 






'/ 


I 

i X SOUND — SOUND COMMAND PROCESSOR' 


i 


AC9B A2 08 

X SOUND 

LDX 

»AUREGS*2 

AC9D 86 AB 


STX 

XTEMP 

AC9F A3 92 


LDA 

EXEC 

ACA1 FO 03 


BEQ 

XSD020 

AC A3 20 72 B8 


JSR 

AUDCLR 

ACA6 20 E8 A4 

XSD020 

JSR 

ATOM 

ACA9 DO 32 


BNE 

XSD090 

ACAB C9 01 


CMP 

#NULL 

ACAD FO 2E 


BEQ 

XSD090 

ACAF C9 02 


CMP 

#NUM 

ACB1 DO 08 


BNE 

XSD023 

ACB3 A3 B8 


LDA 

NUMBER 

ACB3 09 80 


ORA 

#S80 

ACB7 83 B7 


STA 

POINT+1 

ACB9 DO 04 


BNE 

XSD027 

ACBB 29 84 

XSD023 

AND 

#NVAR+BPTR 

ACBD FO 1C 


BEQ 

XSD085 

ACBF A6 AB 

XSD027 

LDX 

XTEMP 

ACC 1 A5 92 


LDA 

EXEC 

ACC3 FO OA 


BEQ 

XSD030 

ACC 5 A5 B6 


LDA 

POINT 

ACC7 9D 53 05 


STA 

AUD I OR— 2/ X 

ACCA A5 B7 


LDA 

POINT+1 

ACCC 9D 54 05 


STA 

AUDIOR— 1 1 X 

ACCF CA 

XSD030 

DEX 


ACDO CA 


DEX 


ACD1 FO OA 


BEQ 

XSD090 

ACD3 86 AB 


STX 

XTEMP 

ACD5 20 EE B7 


JSR 

SKPSEP 

ACD8 4C A6 AC 


JMP 

XSD020 

ACDB 

XINOSO 



ACDB A9 02 

XSD085 

LDA 

#1 MPERR 

A CDD 

XIN090 



ACDD 60 

XSD090 

RTS 







PILOT — H. B. STEWART 


SETUP INDEX TO « OF REOS 


i EXECUTE MODE? 
* NO. 


i YES — CLEAR AUDIO REGISTERS 


i SCAN FOR VARIABLE NAME, 
i ATOM SYNTAX ERROR 


i END OF OPERANDS? 

i YES. 


i NUMERIC CONSTANT? 
i NO. 


i YES — SAVE VALUE. 
i SET FLAG FOR 'TONES'. 


(BRA) . 


NUMERIC VARIABLE? 
NO. 


GET INDEX (5 - OPERAND #). 
EXECUTE MODE? 

NO — CONTINUE SYNTAX SCAN. 


YES — PUT VAR ADDRESS TO LIST. 




; NO MORE OPERANDS ALLOWED. 


; SKIP SEPARATOR. 




; IMPROPER OPERAND. 




RETURN WITH CC SET. 
















— 


















PILOT 


H. B. STEWART 


ACDE A9 04 
ACEO 20 B7 B 1 
ACE3 DO F8 


i XIN — READ COMMAND PROCESSOR 

XIN LDA #OREAD 

JSR SCNDEV 

BNE XIN090 


READ DIRECTION. 

CONVERT DEVICE SPEC TO IOCB INDEX. 
ERROR. 


ACE5 86 AD 
ACE7 20 EE B7 
ACEA 20 E8 A4 
ACED DO EE 


STX 

XTEMP+2 

i SAVE 

IOCB 

INDEX. 

JSR 

SKPSEP 

i SKIP 

OVER 

SEPARATOR. 

JSR 

BNE 

ATOM 

XIN090 

i FIND 
; ERROR 

TYPE 

OF VARIABLE. 


ACEF 85 AB 
ACF 1 29 9D 
ACF3 FO E6 


STA 

AND 

BEQ 


XTEMP * SAVE ATOM TYPE. 

#SVAR+USVAR+NVAR+NULL+BPTR ; VALID TYPE? 
XIN080 i NO. 


ACF5 A5 92 
ACF7 FO E4 


LDA EXEC 

BEQ XIN090 


i EXECUTE MODE? 
; NO. 


ACF9 84 AC 
ACFB A6 AD 
ACFD AO 00 
ACFF 84 8E 

AD01 AD 60 05 
AD04 C9 45 
AD06 DO 04 


STY XTEMP+1 

LDX XTEMP+2 

LDY #0 

STY TELN+2 

LDA OPNBUF 

CMP #'E 

BNE XIN030 


AD08 98 
AD09 20 65 B8 


TYA 

•JSR CRSNOP 


ADOC 20 11 B 1 
ADOF C9 9B 
ADI 1 FO OE 


XIN030 JSR 

DIN 

CMP 

#EOL 

EEQ 

XIN040 


SAVE LINE INDEX. 

GET IOCB INDEX. 

INIT INDEX TO ACCEPT BUFFER. 


; SEE IF READING FROM TEXT SCREEN. 
; NO. 

; YES — ENABLE CURSOR (Y = 0). 

; MAKE IT APPEAR. 

; GET A CHARACTER FROM DEVICE, 
i END OF LINE? 

; YES — DONE. 


AD 13 91 8C 
ADI 5 C8 
AD 16 CO FE 
AD 18 DO F2 

ADI A 20 11 B 1 
AD ID C9 9B 
AD1F DO F9 

AD21 84 8F 
AD23 20 65 B8 
AD26 4C 40 A8 



STA 
I NY 

(TELN)i Y 


CPY 

#TEXLNG 


BNE 

XIN030 

XIN035 

JSR 

DIN 


CMP 

#EOL 


BNE 

XIN035 

XIN040 

STY 

TELN+3 


JSR 

CRSNOP 


JMP 

XAC024 


BUFFER FULL? 

NO. 

YES — FLUSH TO EOL. 


SAVE STRING END INDEX. 


DISABLE CURSOR AGAIN (A = *9B 
rn ArrCDT rnnF TO FINISH P 





( 


SAMXT 


PILOT — H. B. STEWART 




XOUT — WRITE COMMAND PROC 


ESSOR / 


AD29 A9 08 
AD2B 20 B7 B1 
AD2E DO 2B 

XOUT 

LDA 

JSR 

BNE 

#OWR I T 
SCNDEV 
X0T090 

AD30 86 AB 
AD32 B 1 80 
AD34 20 EO B7 
AD37 FO 01 


STX 

LDA 

JSR 

BEQ 

XTEMP 
( I NLN ) / Y 
CHKTRM 
X0T005 

AD39 C8 


I NY 


AD3A 20 43 B9 

X0T005 

JSR 

TEXP 

AD3D FO 1C 

; *S* 

LDA 

BEQ 

EXEC 

X0T090 

AD3F 84 AC 


STY 

XTEMP+1 

XTEMP 

TELN+2 

AD4 1 A6 AB 
AD43 A4 8E 


LDX 

LDY 

AD45 C4 8F 
AD47 FO 09 

X0T010 

CPY 

BEQ 

TELN+3 

X0T020 

AD49 B9 77 05 
AD4C 20 16 B 1 
AD4F C8 
AD50 DO F3 


LDA 
JSR 
I NY 

TEXBUFi Y 
DOUT 


BNE 

X0T010 

AD52 A9 9B 
AD54 20 16 B 1 

X0T020 

LDA 

JSR 

#EOL 

DOUT 

AD57 A4 AC 
AD59 A9 00 


LDY 

LDA 

XTEMP+ 1 
#0 

AD5B 60 

X0T090 

RTS 



WRITE DIRECTION. 

CONVERT I/O SPEC TO DEVICE INDEX. 
ERROR. 

SAVE I OCB INDEX. 


TERMINATOR FOLLOWING DEVICE SPEC? 
YES — DON'T ADVANCE INDEX. 

NO — SKIP OVER SINGLE SEPARATOR. 


REST OF STATEMENT IS A TEXT EXPRESSION. 


EXECUTE MODE? 
NO. 


SAVE LINE INDEX. 

GET I OCB INDEX. 

START OF TEXT EXPRESSION EVALUATION. 


DONE? 

YES. 

NO — PUT CHAR TO DEVICE. 


i (BRA). 

i TERMINATE RECORD. 

; SET CC FOR NORMAL EXIT, 
i RETURN WITH CC SET. 













PILOT — H. B. STEWART 


PILOT 


H. B STEWART 






i XDONE 

— CLOSE 

COMMAND 

AD5C 

A9 

00 


XDONE 

LDA 

#0 

AD5E 

20 

B7 

B 1 


JSR 

SCNDEV 

AD61 

DO 

09 



BNE 

XDN090 

AD63 

A5 

92 



LDA 

EXEC 

AD65 

FO 

05 



BEQ 

XDN090 

AD67 

20 

FD 

BO 


JSR 

DCLOSE 

AD6A 

A9 

00 



LDA 

#0 

AD6C 




XWT090 



AD6C 

60 



XDN090 

RTS 



PROCESSOR 

; INVALID OPEN CODE MEANS CLOSE, 
i CONVERT DEVICE SPEC TO IOCB INDEX, 
i ERROR. 

; EXECUTE MODE? 

; NO. 

i YES — CLOSE IOCB & DEVICE. 

; SET CC FOR NORMAL EXIT. 

; RETURN WITH CC SET. 


PILOT 


H B. STEWART 










COMMAND PROCESSOR 




AD6D 20 92 


AO 70 AS 92 
A072 FO F8 


A074 A2 13 
6 84 AB 


A078 A4 AB 
A07A AS 93 
A07C OS 94 
A07E FO EC 


A080 A4 14 


A082 20 46 B8 
A08S C4 14 
AD87 FO F 9 


A089 A9 FF 
A08B 20 40 B6 
A08E 4C 78 AD 




JSR 

EXP 


LDA 

BEQ 

EXEC 

XMT090 


LDX 

STY 

•EXPSTK-DTAB 

XTEMP 

LDY 

LDA 

ORA 

BEQ 

XTEMP 

EXPSTK 

EXPSTHM 

XWT090 


LDY 

RTCLOH+2 


JSR 

CPY 

BEQ 

ABRTCK 

RTCL0K+2 

XWT020 


Cda 

JSR 

• -1 
DADDS 


JMP 

XWT010 



i THERE host be AN EXPRESSION FOLLOWING 


I EXECUTE NODE? 
i MO — ALL DOMI 


t YES — WORK WITH COUNT 
l SAVE LINE INDEX 




4 RESTORE INDEX 
l ALL DONE? 








I YES 

i NO — WAIT FOR 


t ... OPERATOR ABORT . . . 
i ... OR CLOCK TO CHANGE 




COUNT 


i>dc*x- 












































































PILOT — H. B. STEWART 






PILOT 


H B STEWART 


XCASS — CASSETTE ON/OFF COMMAND PROCESSOR 


AD91 

A2 

ED 


XCASS 

LDX 

#CCTAB-CTAB 

l 

CHECK FOR 'ON' OR 'OFF'. 

AD93 

20 

10 

A3 


JSR 

CMATCH 



AD96 

DO 

09 



BNE 

XCA090 

> 

NOT FOUND — ERROR. 

AD98 

A5 

92 



LDA 

EXEC 

i 

EXECUTE MODE? 

AD9A 

FO 

05 



BEQ 

XCA090 

i 

NO. 

AD9C 

8E 

02 

D3 


STX 

PACTL 

i 

YES — ISSUE COMMAND. 

AD9F 

A9 

00 



LDA 

#0 

i 

SET CC FOR NORMAL EXIT. 

ADA1 

60 



XCA090 

RTS 


J 

RETURN WITH CC SET. 





i 

i XCSYNC — 

CASSETTE SYNC COMMAND 

PROCESSOR 

ADA2 

FO 

IB 


i 

XCSYNC 

BEQ 

XCS090 

i 

SYNTAX SCAN. 

ADA4 

AD 

02 

D3 


LDA 

PACTL 

# 

CHECK CASSETTE MOTOR. 

ADA7 

29 

08 



AND 

#*08 



ADA9 

DO 

12 



BNE 

XCS080 

} 

MOTOR OFF. 

ADAB 

A9 

10 



LDA 

#*10 

i 

ON — WAIT FOR MARK TO SPACE 

ADAD 

20 

46 

B8 

XCS010 

JSR 

ABRTCK 

j 

WAIT FOR BREAK . . . 

ADBO 

2C 

OF 

D2 


BIT 

SKSTAT 



ADB3 

FO 

F8 



BEQ 

XCS010 

# 

... OR MARK. 

ADB5 

20 

46 

B8 

XCS020 

JSR 

ABRTCK 

# 

WAIT FOR BREAK . . . 

ADB8 

2C 

OF 

D2 


BIT 

SKSTAT 



ADBB 

DO 

F8 



BNE 

XCS020 

i 

... OR SPACE. 

ADBD 

A9 

00 


XCS080 

LDA 

#0 

i 

SET CC FOR NORMAL EXIT. 

ADBF 

60 



XCS090 

RTS 


# 

RETURN WITH CC SET. 





i 

i XTRACE — 

TRACE MODE ON/OFF 

COMMAND 

ADCO 

A2 

ED 


i 

XTRACE 

LDX 

#CCTAB-CTAB 

I 

CHECK FOR 'ON' OR 'OFF'. 

ADC2 

20 

10 

A3 


JSR 

CMATCH 


NOT FOUND — ERROR. 

ADC 5 

DO 

OC 



BNE 

XTR090 

i 

ADC7 

A5 

92 



LDA 

EXEC 

# 

EXECUTE MODE? 

ADC9 

FO 

08 



BEQ 

XTR090 

i 

NO. 

ADCB 

8A 




TXA 


i 

YES — 'OFF' RESULTS IN . . . 

ADCC 

49 

3C 



EOR 

#CASS0F-*80 

i 

... 0 IN REGISTER A. 

ADCE 

8D 

75 

05 


STA 

TRACE 

i 

SET FLAG. 

ADD1 

A9 

00 



LDA 

#0 

# 

SET CC FOR NORMAL EXIT. 




























































PILOT — H. B. STEWART 


t 


i XSAVE — SAVE COMMAND PROCESSOR 




• 

ADD4 

20 

9C 

BO 

XSAVE JSR 

DNAME 

j 


ADD7 

20 

EE 

B7 

JSR 

SKPSEP 

J 

• 

ADDA 

A5 

92 


LDA 

EXEC 

# 


ADDC 

FO 

24 


BEQ 

■XSV090T-, 

9 







M 

LX3-r£iL 

• 

ADDE 

A2 

30 


LDX 

#I0CB3 



ADEO 

A9 

08 


LDA 

#0WR I T 

9 

# 

ADE2 

20 

B7 

BO 

JSR 

DOPEN 



ADE5 

A9 

OB 


LDA 

#PUTC 

9 

# 

ADE7 

9D 

42 

03 

STA 

ICCOM, X 



ADEA 

A9 

BO 


LDA 

#$S0+I0CB3 

9 

m 

ADEC 

8D 

70 

05 

STA 

CDEST 



ADEF 

20 

30 

AE 

JSR 

LISTER 

9 

• 

ADF2 

A2 

30 


LDX 

#I0CB3 



ADF4 

20 

FD 

BO 

JSR 

DCLOSE 

i 

# 

ADF7 

A9 

06 


LDA 

#EPUTC-IOVBAS i 


ADF9 

8D 

70 

05 

STA ' 

CDEST 


m 





i *** EXTERNAL 

ENTRY POINT 

FROM ' 

m 

ADFC 

20 

33 

BF 

XSV050 JSR 

RDYMES 

9 


A DFF 

A9 

00 


LDA 

#0 

9 



NO. 



; VES — OPEN DEVICE FOR OUTPUT. 
; SETUP IOCB FOR PUT CHARACTER. 


; RE-ROUTE 'CHOT' OUTPUT TO DEVICE. 
; OUTPUT PROGRAM TO DEVICE. 




; CLOSE DEVICE. 


i RESTORE 'CHOT' OUTPUT. 







SET CC FOR NORMAL EXIT. 


AEOl 
AEOl 60 


XLD090 


RTS 


; RETURN WITH CC SET. 


AE02 4C 30 AE (^XSV090 JMP 


— 


LISTER 





; SYNTAX CHECK & RETURN WITH CC SET. 

















__ 






PILOT 


H B. STEWART 



i XLOAD — LOAD COMMAND PROCESSOR 


i 




AE05 

20 

7E B 1 

XLOAD JSR 

SFNAME 

4 

EXTRACT DEVICE/FILENAME 



AE08 

DO 

F7 

BNE 

XLD090 

i 

ERROR. 

0 


AEOA 

A5 

92 

LDA 

EXEC 

i 

EXECUTE MODE? 



AEOC 

FO 

F3 

BEQ 

XLD090 

i 

NO. 

0 


AEOE 

A2 

30 

LDX 

#I0CB3 





AEIO 

A9 

04 

LDA 

#OREAD 

i 

YES — OPEN DEVICE FOR READING. 



AE12 

20 

B7 BO 

JSR 

DOPEN 



# 


AE 1 5 

8E 

72 05 

STX 

LOADFG 

l 

SET LOAD FLAG. 



AE18 

A5 

FF 

LDA 

RUN 

# 

RUN MODE LOAD? 

# 


AE1 A 

FO 

03 

BEQ 

XLD050 

l 

NO — IMMEDIATE (DON'T CLEAR PROGRAM) 



AE1C 

20 

FF A9 

JSR 

CLRPRG 

l 

CLEAR PROGRAM STORAGE AREA. 

• 


AE1F 

A 9 

ocH 

X* 

XLD050** LDA 

#0 

i 

CLEAR USE STACK. 



AE21 

%5 

90 

STA 

USTKP 



• 











AE23 

4C 

9F AO 

JMP 

MLLOAD 

i 

LOAD UNTIL I/O ERROR OR END OF FILE. 








9 

SEE 'GETCOM'. 



















PILOT — H. B. STEWART 


' XL I ST — LIST COMMAND PROCESSOR 


AE26 20 30 AE 
AE29 DO 04 

AE2B A5 92 
AE2D DO CD 

AE2F 60 

AE30 20 E8 A4 
AE33 DO FA 

AE35 C9 01 
AE37 FO 3B 


AE39 

C9 

02 

AE3B 

DO 

16 

AE3D 

A5 

B8 

AE3F 

85 

DE 

AE4 1 

A5 

B9 

AE43 

85 

DF 

AE45 

20 

EE B7 

AE48 

20 

E8 A4 

AE4B 

DO 

E2 

AE4D 

C9 

01 

AE4F 

FO 

ID 

AE51 

C9 

02 ' 

AE53 

DO 

69 

AE55 

A5 

B8 

AE57 

85 

EO 

AE59 

A5 

B9 

AE5B 

85 

El 

AE5D 

84 

AB 

AE5F 

A2 

60 

AE61 

AO 

5E 

AE63 

20 

63 B5 

AE66 

08 


AE67 

A4 

AB 

AE69 

28 


AE6A 

BO 

16 

AE6C 

90 

50 

AE6E 

A5 

DE 

AE70 

A6 

DF 

AE72 

BO 

OA 

AE74 

A9 

00 

AE76 

85 

DE 


; *** EXTERNAL ENTRY POINT FROM 

XLIST 


XSAVE ' *** 


LISTER 


JSR 

BNE 

LISTER 

XLS009 

i DO THE LIST PROCESS, 
i ERROR. 

LDA 

BNE 

EXEC 

XSV050 

i EXECUTE MODE? 

; YES — SIGN OFF & RETURN. 

RTS 


; RETURN WITH CC SET. 

JSR 

BNE 

ATOM 

XLS009 

i GET START LINE#, 
i ERROR — RETURN. 

CMP 

BEQ 

#NULL 

XLS200 

i NO START LINE #. 

CMP 

BNE 

#NUM 

XLS029 

i SYNTAX ERROR. 

LDA 

STA 

LDA 

STA 

NUMBER 

LS 

NUMBER+1 

LS+1 

; SAVE VALUE IN 'LS'. 

JSR 

JSR 

BNE 

SKPSEP 

ATOM 

XLS009 

i SKIP SEPARATOR. 

; GET ENDING LINE #. 
; INVALID ATOM. 

CMP 

BEQ 

#NULL 

XLS180 

; NO END LINE #. 

CMP 

BNE 

#NUM 

XLS900 

; SYNTAX ERROR (SKIP BRANCH 

LDA 

number 

j SAVE VALUE IN 'LE'. 


STA 

LDA 

STA 


XLS180 


XLS200 


BCC 

LDA 

LDX 

BCS 

LDA 

STA 


LE 

NUMBER+1 

LE+1 

XTEMP 

#LE-DTAB 

#LS-DTAB 




; CHECK FOR END >= START. 


DCMPI 


XTEMP 


XLS235 

; END >- START. 

XLS900 

; END < START. 

LS 

; FORCE END = START. 

LS+1 

XLS230 

} (BRA). 

#0 

LS 

i DEFAULT — START : 


PILOT 


H B STEWART 


AE78 83 DF 

AE7A A9 OF 
AE7C A2 27 

AE7E 85 EO 
AE80 86 El 

AE82 A3 92 
AE84 FO 3A 

AE86 84 AB 
AE88 A 5 AE 
AE8A 85 B6 
AE8C A5 AF 
AE8E 85 B7 

AE90 A2 36 
AE92 20 9D B3 
AE95 FO 22 

AE97 20 54 B8 
AE9A A2 5C 
AE9C AO 5E 
AE9E 20 63 B5 
AEA1 90 OE 

AEA3 A2 60 
AEA5 AO 5C 
AEA7 20 63 B5 
AEAA 90 OD 

AEAC AO 36 
AEAE 20 09 B8 

AEB 1 A2 36 
AEB3 20 10 B4 
AEB 6 4C 90 AE 

AEB9 A4 AB 
AEBB A9 00 


XLS230 


XLS240 


XLS2S0 


XLS260 


STA 

LS+l 

LDA 

»MAXLN 

LDX 

#MAXLN/256 

STA 

LE 

STX 

LE + 1 

LDA 

EXEC 

BEQ 

XLS990 

STV 

XTEMP 

LDA 

S1L 

STA 

POINT 

LDA 

S1L+1 

STA 

POINT+1 

LDX 

#PQINT-DTAB 

JSR 

SEND 

BEQ 

XLS260 

JSR 

GTLNNO 

LDX 

#L INENO-DTAB 

LDY 

#LS-DTAB 

JSR 

DCMPI 

BCC 

XLS250 

LDX 

#L„E-DTAB 

LDY 

#L INENO-DTAB 

JSR 

DCMPI 

BCC 

XLS260 

LDY 

#POINT~DTAB 

JSR 

PSF 

LDX 

#POINT-DTAB 

JSR 

SNXTI 

JMP 

XLS240 

LDY 

XTEMP 

LDA 

#0 


AEBD 60 


RTS 


AEBE A9 02 


XLS900 LDA 


#IMPERR 


AECO 60 


XLS990 RTS 



PTI HT U 13 QTPIJAPT 


DEFAULT 


END 


9999 


EXECUTE MODE? 

NO. 

SETUP 'POINT ' TO POINT TO PROGRAM STORAGE. 

CHECK FOR END OF STATEMENT LIST. 

DONE. 

MOVE LINE # TO 'LINENO' (USES 'POINT') 
SEE IF >= START LINE. 

NO — DON'T PRINT. 

SEE IF <= END LINE. 

NO — DONE. 

PRINT STORAGE FORM LINE. 

ADVANCE TO NEXT LINE. 

SET CC FOR NORMAL EXIT. 

RETURN WITH CC SET. 

IMPROPER PARAMETER ERROR. 


RETURN WITH CC SET. 


PILOT 


H. B. STEWART 






i 

i XAUTO — AUTO 

i 

XAUTO JSR 

-INPUT COMMAND 

AEC1 

20 

DA 

AE 

NUMNUM 

AEC4 

DO 

13 


BNE 

XAU090 

AEC6 

A5 

92 


LDA 

EXEC 

AEC8 

FO 

OF 


BEQ 

XAU090 

AECA 

8D 

76 

05 

STA 

AUTOIN 

AECD 

A5 

86 


LDA 

AC0L.R2 

AECF 

8D 

C6 

02 

STA 

C0L0R0+2 

AED2 

A5 

87 


LDA 

AC0LR1 

AED4 

8D 

C5 

02 

STA 

COLORO+l 

AED7 

A9 

00 


LDA 

#0 

AED9 

60 



XAU090 RTS 



AEDA 

A9 

00 


NUMNUM LDA 

#0 

AEDC 

85 

FA 


STA 

AL INE+1 

AEDE 

85 

FC 


STA 

AINC+1 

AEEO 

A9 

OA 


LDA 

#10 

AEE2 

85 

F9 


STA 

ALINE 

AEE4 

85 

FB 


STA 

AINC 

AEE6 

20 

E8 

A4 

JSR 

ATOM 

AEE9 

DO 

33 


BNE 

NMN990 

AEEB 

C9 

01 


CMP 

#NULL 

AEED 

FO 

2C 


BEQ 

NMN090 

AEEF 

C9 

02 


CMP 

#NUM 

AEF 1 

DO 

29 


BNE 

NMN900 

AEF3 

A5 

B8 


LDA 

NUMBER 

AEF5 

85 

F9 


STA 

ALINE 

AEF7 

A5 

B9 


LDA 

NUMBER+1 

AEF9 

85 

FA 


STA 

AL INE+1 

AEFB 

20 

EE 

B7 

JSR 

SKPSEP 

AEFE 

20 

E8 

A4 

JSR 

ATOM 

AF01 

DO 

IB 


BNE 

NMN990 

AF03 

C9 

01 


CMP 

#NULL 

AF05 

FO 

14 


BEQ 

NMN090 

AF07 

C9 

02 


CMP 

#NUM 

AF09 

DO 

11 


BNE 

NMN900 

AFOB 

A5 

B8 


LDA 

NUMBER 

AFOD 

85 

FB 


STA 

AINC 

AFOF 

A5 

B9 


LDA 

NUMBER* 1 

AF1 1 

85 

FC 


STA 

AINC+1 

AF13 

30 

07 


BMI 

NMN900 

AF 1 5 

05 

FB 


ORA 

AINC 

AF1 7 

FO 

03 


BEQ 

NMN900 


PROCESSOR 


i GET LINE # AND INCREMENT. 

» ERROR. 

j EXECUTE MODE? 
i NO. 

t YES — SET AUTO-INPUT MODE. 
i SET SCREEN BACKGROUND COLOR. 

> SET SCREEN LETTER COLOR. 

j SET CC FOR NORMAL EXIT. 

> RETURN WITH CC SET. 

i SETUP DEFAULT VALUES. 

) LINE # 8< INCREMENT « 10. 

i GET STARTING LINE #. 

) ERROR. 

i DEFAULT TO 10, 10. 

i SYNTAX ERROR. 
i SET VALUE IN 'ALINE'. 

i SKIP SEPARATOR ( S ) . 
i GET LINE # INCREMENT. 
i ERROR. 

i DEFAULTS TO XX, 10. 

; SYNTAX ERROR. 
i SET VALUE IN 'AINC'. 

; NEGATIVE INCREMENT IS ILLEGAL. 

i TEST FOR ZERO INCREMENT, 
j ZERO — ERROR. 




PILOT 


H. B. STEWART 


(, 

y 



AF19 

A9 

00 


LDA 

#1 

AF1B 

60 


NMN090 

RTS 


AF1C 

A9 

02 

NMN900 

LDA 

0 

AF1E 

60 


NMN990 

RTS 




#0 


# I MPERR 


i SET CC FOR NORMAL EXIT, 
i RETURN WITH CC SET 
i IMPROPER PARAMETER ERROR 
; RETURN WITH CC SET. 






















































































































PILOT 


H. B. STEWART 


; XREN — RENUMBER COMMAND PROCESSOR 


AF1F 20 DA AE 

XREN 

JSR 

NUMNUM 

j 

GET LINE # AND INCREMENT 

AF22 DO 3B 


BNE 

XNU090 

9 

ERROR. 

AF24 A5 92 


LDA 

EXEC 

i 

EXECUTE MODE? 

AF26 FO 37 


BEQ 

XNU090 

# 

NO. 

AF2S 84 AB 


STY 

XTEMP 

i 

SAVE LINE INDEX. 

AF2A A5 AE 


LDA 

SI L 

9 

SETUP POINTER TO PROGRAM STORAGE AREA 

AF2C 85 B6 


STA 

POINT 


AF2E A5 AF 


LDA 

S1L+1 



AF30 85 B7 


STA 

POINT+1 



AF32 A2 36 

XNU010 

LDX 

#POINT-DTAB 

9 

END OF PROGRAM? 

AF34 20 9D B3 


JSR 

SEND 


AF37 FO IF 


BEQ 

XNU080 

9 

YES — DONE. 

AF39 A2 79 


LDX 

#ALINE-DTAB 

i 

CHECK FOR LINE # IN RANGE. 

AF3B 20 63 AF 


JSR 

CHKLN 


AF3E BO 20 


BCS 

XNU190 

9 

OUT OF RANGE. 

AF40 AO 03 


LDY 

#3 

9 

NO — ALTER NUMBER. 

AF42 A5 FA 


LDA 

ALINE+1 



AF44 91 B6 


STA 

(POINT), Y 



AF46 CB 


I NY 




AF47 A5 F9 


LDA 

ALINE 



AF49 91 B6 


STA 

(POINT), Y 



AF4B AO 7B 


LDY 

#AINC— DTAE 

9 

INCREMENT LINE NUMBER. 

AF4D 20 80 B5 


JSR 

DADDI 



AF50 A2 36 


LDX 

#PQINT-DTAB 

9 

NEXT STATEMENT. 

AF52 20 10 B4 


JSR 

SNXTI 




AF55 

4C 

32 

AF 


JMP 

XNU010 


AF58 

20 

33 

BF 

XNU080 

JSR 

RDYMES 

i GENERATE "READY" MESSAGE 

AF5B 

A4 

AB 



LDY 

XTEMP 

; RESTORE LINE INDEX. 

AF5D 

A9 

00 



LDA 

#0 

i SET CC FOR NORMAL EXIT. 

AF5F 

60 



XNU090 

RTS 


; RETURN WITH CC SET. 

AF60 

A4 

AB 


XNU190 

LDY 

XTEMP 

; RESTORE LINE INDEX. 

AF62 

60 




RTS 


i RETURN WITH CC SET. 





; CHKLN 

9 


CHECK STATEMENT LINE 

# FOR OUT OF RANGE. 




i CALLING SEQUENCE: 

9 

i X = DTAB INDEX 

TO LINE 1 

NUMBER. 




9 

9 

JSR 

CHKLN 






9 

BCS 

OUT OF 

RANGE (A 

= ERROR CODE) 

AF63 

AO 

27 

9 

CHKLN 

LDY 

#MAXLN+l/256 


AF65 

A9 

10 


LDA 

#MAXLN+1 





PILOT 


H. B STEWART 





PILOT 


H. B 


STEWART 


I/O SUBSYTEM ROUTINES 


CHOT — PRINT ONE CHARACTER TO "E: 

A = ATASCII CHARACTER 

'CDEST ' ■ I/O ROUTINE OFFSET OR *80+XX OR *FF. 


JSR CHOT 


AF6F 

86 

A1 


CHOT 

STX 

TEMP 

I 

SAVE REGISTERS. 

AF7 1 

84 

A2 



STY 

TEMP+1 



AF73 

AE 

70 

05 


LDX 

CDEST 

i 

PREPARE TO OUTPUT TO DEVICE. 

AF76 

30 

OE 



BMI 

CHOI 00 

i 

SPECIAL OUTPUT. 

AF78 

20 

73 

B 1 


JSR 

IOHAND 







; | 

EXTERNAL 

ENTRY POINT *** 



AF7B 

CO 

00 


IOERCK 

CPY 

#0 

i 

ERROR CHECK. 

AF7D 

10 

1A 



BPL 

CHOI 20 

# 

0. K. 





; | 

EXTERNAL 

ENTRY POINT *** 



AF7F 

84 

E4 


I0E010 

STY 

IOSTAT 

# 

SAVE I/O STATUS. 

AF81 

A9 

86 



LDA 

# I OERR 



AF83 

4C 

6C 

A 1 


JMP 

PSTOP 

# 

STOP ON ERROR. 

AF86 

EO 

FF 


CH0100 

CPX 

#*FF 

9 

RESULT TO 'TEXBUF '? 

AF88 

FO 

05 



BEQ 

CHOI 10 

# 

YES. 

AF8A 

A2 

30 



LDX 

#1 QCB3 

/ 

NO — TO IOCB 3. 

AF8C 

4C 

21 

B 1 


JMP 

DI0005 

9 

OUTPUT CHARACTER AND RETURN. 

AF8F 

A4 

8F 


CHOI 10 

L.DY 

TELN+3 

9 

GET INDEX. 

AF91 

CO 

FE 



CPY 

#TEXLNG 

9 

BUFFER FULL? 

AF93 

FO 

04 



BEQ 

CH0120 

9 

YES — STORE NO MORE. 

AF95 

91 

8C 



STA 

( TEL-N > / Y 

# 

NO — STORE CHARACTER. 

AF97 

E6 

8F 



INC 

TELN+3 



AF99 

A4 

A2 


CH0120 

LDY 

TEMP+1 

9 

RESTORE REGISTERS. 

AF9B 

A6 

A1 



LDX 

TEMP 



AF9D 

60 




RTS 





GETLIN — GET LINE FROM "E: " 

CALLING SEQUENCE: 

X = OFFSET TO BUFFER ADDRESS. 


JSR 


GETLIN 


PILOT 


H B STEWART 


DTAB < X+2 ) 
DTAB ( X+3 ) 


O — START INDEX. 

LINE LENGTH — END INDEX. 


AF9E 86 

A3 


GETLIN 

STX 

TEMP+2 

# 

SAVE INDICES 

AFAO 84 

A4 



STY 

TEMP+3 



AFA2 A9 

00 



LDA 

#0 

i 

ENABLE TEXT CURSOR 

AFA4 95 

82 



STA 

DTAB+2, X 

i 

AS ADVERTISED. 

AFA6 20 

65 

B8 


JSR 

CRSNQP 

i 

MAKE CURSOR SHOW NOW. 

AFA9 B 5 

80 



LDA 

DTAB, X 

# 

SETUP BUFFER ADDRESS. 

AFAB 8D 

44 

03 


STA 

IOCBO+ICBAL 



AFAE B5 

81 



LDA 

DTAB+1 , X 



AFBO 8D 

45 

03 


STA 

IOCBO+ICBAH 



AFB3 A9 

05 



LDA 

#GETR 

i 

GET RECORD COMMAND. 

AFB5 8D 

42 

03 


STA 

IOCBO+ICCOM 



AFB8 A9 

79 


GTL010 

LDA 

#L I NLNG- 1 

# 

SETUP MAXIMUM LINE LENGTH 

AFBA 8D 

48 

03 


STA 

I OCBO+ ICBLL 



AFBD A2 

00 



LDX 

# I OCBO 


IOCB 0. 

AFBF 8E 

49 

03 


STX 

IOCBO+ICBLH 


•M-S*. 

AFC2 20 

56 

E4 


JSR 

CIO 


DO I/O. 





. IF 

DEBUG 







CP Y 

#*B9 

# 

TRUNCATED RECORD? 





BNE 

GTL020 

i 

NO. 





LDA 

#OLLERR 

# 

YES — INFORM OPERATOR & 





JSR 

MESSOT 







JMP 

GTL010 




. END IF 




AFC 5 98 

GTL020 TYA 



m 


AFC6 30 B7 

BMI 

I0E010 

# 



AFC8 20 65 B8 

JSR 

CRSNOP 

t 

0 








AFCB A6 A3 

LDX 

TEMP+2 

i 



AFCD A4 A4 

LDY 

TEMP+3 


# 


AFCF AD 48 03 

LDA 

IOCBO+ICBLL 

* 



AFD2 95 83 

STA 

DTAB+3, X 




AFD4 60 

RTS 



# 







ERROR. 

; DISABLE TEXT CURSOR (A O 0) 
i RESTORE INDICES. 

; SETUP END INDEX. 




AFD5 84 A7 




GSOPEN 


OPEN THE GRAPHICS SCREEN 


i THIS ROUTINE COMPRESSES MEMORY/ OPENS THE GRAPHICS SCREEN AND DE COMPRESSES 
i THE MEMORY AGAIN. 


GSOPEN STY 


TEMP2 




SAVE LINE SCAN INDEX. 


; FIRST COMPRESS THE RAM STORAGE, LEAVING THE FREE AREA AT THE HIGH ADDRESSES 
; BY REMOVING THE GAP BETWEEN THE PROGRAM STORAGE AREA AND THE STRING 
; STORAGE AREA. 










PILOT 


H. B. STEWART 


PILOT 


H. B STEWART 


AFD7 

A5 

BO 


AFD9 

85 

D8 


AFDB 

A5 

B 1 


AFDD 

85 

D9 


AFDF 

A5 

B2 


AFE1 

85 

D6 


AFE3 

A5 

B3 


AFE5 

85 

D7 


AFE7 

38 



AFE8 

A5 

B4 


AFEA 

E5 

B2 


AFEC 

85 

DA 


AFEE 

85 

A8 


AFFO 

A5 

B5 


AFF2 

E5 

B3 


AFF4 

85 

DB 


AFF6 

85 

A9 


AFF8 

18 



AFF9 

A5 

BO 


AFFB 

65 

DA 


AFFD 

85 

OE 


AFFF 

A5 

B 1 


BOOl 

65 

DB 


B003 

85 

OF 


BOOS 

20 

OC 

B5 

B008 

A9 

53 


BOOA 

8D 

60 

05 

BOOD 

A9 

9E 


BOOF 

8D 

61 

05 

B012 

A9 

1C 


BOl 4 

8D 

6A 

03 

B017 

AD 

FI 

06 

BOl A 

8D 

6B 

03 

BOID 

A9 

03 


BOIF 

8D 

62 

03 

B022 

A2 

20 


B024 

20 

48 

B 1 

B027 

20 

56 

E4 

B02A 

84 

E4 


B02C 

30 

24 


B02E 

CE 

FO 

02 

B031 

A9 

46 


B033 

8D 

C4 

02 

B036 

A9 

1A 


B038 

8D 

C5 

02 

B03B 

20 

B9 

BE 


LDA 

S1H 

STA 

MDP 

LDA 

S1H+1 

STA 

MDP + 1 

LDA 

S2L 

STA 

MSP 

LDA 

S2L+1 

STA 

MSP + 1 

SEC 

LDA 

S2H 

SBC 

S2L 

STA 

MBC 

STA 

TEMP2+1 

LDA 

S2H+1 

SBC 

S2L+1 

STA 

MBC + 1 

STA 

TEMP2+2 

CLC 

LDA 

S1H 

ADC 

MBC 

STA 

APPMHI 

LDA 

S1H+1 

ADC 

MBC+1 

STA 

APPMHI. + 1 

JSR 

MOV I A 


' MDP 


'SI H 7 (DESTINATION) 


'MSP 7 = 7 


S2L 7 (SOURCE) 


i 'MBC 7 = 7 S2H 7 - 7 S2L 7 (BYTE COUNT) 
i ( 7 TEMP2 7 +1 = SAME). 


(SAVE FOR LATER) 


APPMHI 7 = 7 S1H 7 + 7 MBC 


NOW ATTEMPT TO OPEN 7 S: 
ENOUGH MEMORY * HOWEVER. 


i MOVE STRING STORAGE DOWN. 

TO THE DESIRED SCREEN MODE; THERE MAY NOT BE 

; DEVICE NAME = 7 S 7 . 


LDA #'S 

STA OPNBUF 

L.DA #EOL 

STA OPNBUF+1 

LDA #OWRIT+OREAD+SPLIT ; SCREEN OPTIONS. 

STA I0CB2+ICAUX 1 

LDA GSMODE 

STA I0CB2+ICAUX2 

LDA #OPEN 

STA I0CB2+ICC0M 

LDX #I0CB2 

JSR BUFPNT 

JSR CIO 

STY IOSTAT 

BMI GS0020 

DEC CRSINH 

LDA #*46 

STA COLORO+O 

LDA #*1A 

STA COLORO+1 

LDA #*94 

STA C0L0R0+2 

JSR GPINIT 


OPEN COMMAND. 

OPEN DEVICE ON IOCB 2. 

SETUP OPEN BUFFER POINTER. 

SAVE STATUS FOR LATER. 

ERROR — DON 7 T PLOT POINT. 

INHIBIT THE CURSOR. 

ESTABLISH ALTERNATE COLORS. 

RED- 

YELLOW (MUST HAVE VALUE *XA). 
BLUE. 

INITIALIZE GRAPHICS PARAMETERS. 


PILOT 


H. B. STEWART 


B03E 

AD 

FI 

06 

LDA 

GSMODE 

i DEFAULT SCREEN MODE? 

B04 1 

C9 

07 


CMP 

#SCNMOD 


B043 

DO 

OD 


BNE 

GS0020 

i NO DON'T PLOT CURSOR 

B045 

A2 

00 


LDX 

#0 

i SET CURSOR POSITION. 

B047 

AO 

6C 


LDY 

#GX— DTAB 


B049 

20 

96 

BC 

JSR 

SETCUR 


B04C 

AD 

53 

05 

LDA 

PEN 


B04F 

20 

3C 

B 1 

JSR 

TOUT 

i PLOT SINGLE POINT. 


; NOW MOVE THE STRING STORAGE AREA 
; THAT THE FREE AREA IS ONCE AGAIN 
; THE STRING STORAGE AREA. 


UP TO THE CURRENT TOP OF MEMORY SO 
BETWEEN THE PROGRAM STORAGE AREA AND 


B052 A5 AS 

GS0020 

LDA 

TEMP2+1 

B054 85 DA 


STA 

MBC 

B056 A5 A9 


LDA 

TEMP2+2 

B058 85 DB 


STA 

MBC + 1 

E05A A5 BO 


LDA 

S1H 

B05C 85 D6 


STA 

MSP 

BOSE A5 B1 


LDA 

S1H+1 

B060 85 D7 


STA 

MSP + 1 

B062 20 77 BO 


JSR 

GS0100 

B065 A4 E4 


LDY 

IOSTAT 

B067 10 08 


BPL 

GS0090 

B069 A2 20 


LDX 

# I 0CB2 

B06B 20 FD BO 


JSR 

DCLOSE 

B06E 4C 7F AF 


JMP 

I0E010 

B07 1 A4 A 7 

GS0090 

LDY 

TEMP2 

B073 8C 54 05 


STY 

GRFLAG 

B076 60 


RTS 



■ 'MBC 7 = PRIOR 'MBC 7 (BYTE COUNT). 

; "MSP 7 = 7 S 1 H 7 (SOURCE). 

; DO FINAL SETUP AND MOVE. 

; SEE IF THERE WAS AN I/O ERROR, 
i NO. 

. YES — CLOSE DEVICE & REPORT ERROR. 

; RESTORE SCAN INDEX, 
i SET GRAPHICS SCREEN FLAG. 


B077 38 
E078 AD E5 02 
B07B 85 B4 
B07D 85 OE 
B07F E5 DA 
B081 85 D8 
B083 85 B2 

B085 AD E6 02 
B088 85 B5 
B08A 85 OF 
B08C E5 DB 
B08E 85 D9 
B090 85 B3 

B092 A2 8E 
B094 A9 FF 
B096 20 4D B6 

B099 4C 30 B5 


; *** EXTERNAL ENTRY POINT FROM 'GEX IT 7 *** 


GS0100 SEC 

LDA MEMHI 

STA S2H 

STA APPMHI 

SBC MBC 

STA MDP 

STA S2L 


"MDP 7 = 7 MEMHI 7 - 'MBC 7 (DESTINATION). 
7 S2H 7 * 'MEMHI 7 . 

'S2L 7 = SAME AS NEW 7 MDP 7 . 


LDA MEMHI+1 

STA S2H+1 

STA APPMHI+1 

SBC MBC-*- 1 

STA MDP+1 

STA S2L+1 


NOW AS ABOVE FOR MSB. 


LDX #APPMHI-*-*100-DTAB ; DECRMENT 'APPMHI' BY ONE. 

LDA #-l 

JSR DADDS 


JMP 


MOVDA 


i MOVE STRING STORAGE TO TOP OF MEM & RETURN. 



PILOT 


H. B. STEWART 


V/ I M 


i iu v L/n 


* nuvc. BIKING UTURAGE TO TOP OF MEM «, RETURN 


PILOT — H. B STEWART 


B09C 20 FA B7 


B09F A2 00 

B0A1 B 1 80 
B0A3 20 D8 B7 
B0A6 FO 09 

BOAS 9D 60 05 
BOAB E8 
BOAC C8 
BOAD EO OF 
BOAF DO FO 

BOB 1 A9 9B 
B0B3 9D 60 05 
B0B6 60 


B0B7 48 
B0B8 20 FD BO 
BOBB 68 


BOBC OD 5D 05 
BOBF 9D 4A 03 


i 

i DNAME — EXTRACT DEVICE/FILENAME 

I 

I CALLING SEQUENCE: 

j 

i Y » INDEX TO START OF NAME 

J 

i J SR DNAME 

i 

i Y » INDEX TO NAME DELIMITER. 

i X =» 'OPNBUF ' INDEX TO CHAR AFTER NAME ( EOL ) . 

I 'OPNBUF ' RECEIVES NAME 

; 


DNAME 

JSR 

SLB 

i SKIP READING BLANKS. 

) *S* 

JMP 

FNAME 

J NAME TO 'OPNBUF' & RETURN 


FNAME 

LDX 

#0 


FNM010 

LDA 

( INLN ) i Y 



JSR 

CHKSEP 

i SEPARATOR? 


BEQ 

FNM020 

> YES — DONE. 


STA 

OPNBUF/ X 

i NO — PART OF NAME. 


I NX 




INY 




CPX 

#DNS I ZE 

) NAME TOO LONG? 


BNE 

FNM010 

i NO — KEEP SCANNING. 

FNM020 

LDA 

#EQL 

} END OF NAME. 


STA 

OPNBUF/ X 



RTS 




i DOPEN — DEVICE OPEN 

i 

; CALLING SEQUENCE: 

i 

; ' IOEDIS ' O 0 INDICATES TO IGNORE I/O ERROR. 

; X * IOCB INDEX. 

i A = OPEN DIRECTION + AUX1 OPTIONS. 

i 'OPNBUF' CONTAINS DEVICE/FILENAME. 

i 

; JSR DOPEN 

i 

i RETURNS ONLY IF OPEN SUCCEEDED. 


i 


DOPEN 

PHA 


j SAVE OPEN CODE. 


JSR 

PLA 

DCLOSE 

, *** JUST IN CASE ***. 

i RESTORE OPEN CODE. 

i *S* 

STX 

TEMP 


i *S* 

STY 

TEMP+1 



ORA 

AUX 1 

i MERGE USER BYTE. 


STA 

ICAUX1. X 

; SETUP OPEN DIRECTION. 


PILOT 


H B STEWART 


BOC2 

20 

6C 

B2 

JSR 

CHKDEV 

f 

CHECK FOR INVALID OPEN 

BOC9 

AD 

BE 

09 

LDA 

AUX2 

l 

SETUP AUX2 

B0C8 

9D 

4B 

03 

STA 

ICAUX2. X 



BOCB 

A9 

OO 


LDA 

•0 



BOCD 

9D 

48 

03 

STA 

ICBLL. X 

l 

SETUP FOR ACCUMULATOR XFER OF 

BODO 

9D 

49 

03 

STA 

ICBLH. X 



B0D3 

0D 

9D 

09 

STA 

AUX1 

1 

CLEAR USER BYTES 

B0D6 

8D 

9E 

09 

STA 

AUX2 



B0D9 

A9 

03 


LDA 

#OPEN 

j 

OPEN COMMAND 

BODB 

9D 

42 

03 

STA 

I CCOM/ X 



BODE 

20 

48 

B 1 

JSR 

BUFPNT 

i 

SETUP OPEN BUFFER POINTER 

B0E1 

20 

96 

E4 

JSR 

CIO 






j 

JSR 

COLORS 

l 

RE-ESTABLISH SPECIAL COLORS. 


B0E4 10 26 


*S* 


TYA 

BPL 


D0P010 

*** EXTERNAL ENTRY POINT *** 

X = IOCB INDEX. 

Y = ERROR STATUS ON ENTRY. 


*** NEEDED ONLY IF OUTPUT TO S: OR E: ALLOWED 

IN GRAPHICS MODE *** 

CHECK STATUS. 

O. K. 


B0E6 

AD 

00 05 

D0P005 

LDA 

IOEDIS 

B0E9 

08 



PHP 


BOEA 

A9 

9B 


LDA 

#EOL 

BOEC 

28 



PLP 


BOED 

FO 

08 


BEQ 

D0P007 

BOEF 

A5 

FF 


LDA 

RUN 

B0F1 

08 



PHP 


B0F2 

A9 

9B 


LDA 

#EOL 

B0F4 

28 



PLP 


B0F5 

DO 

15 


BNE 

D0P010 

B0F7 

20 

FD BO 

D0P007 

JSR 

DCLOSE 

BOFA 

4C 

7F AF 


JMP 

I0E010 


ERROR STOP DISABLED? 

(RETURN EOL CHAR ON ERROR). 

NO. 

YES — IS IT ALSO RUN MODE? 

RETURN EOL ON ERROR. 

YES. 

NO — CLOSE FILE IN ERROR. 

ERROR — STOP (SKIP BRANCH POINT) 


BOFD 86 A1 




DCLOSE — CLOSE IOCB 
CALLING SEQUENCE: 

X = IOCB INDEX 
JSR DCLOSE 

NOTE: CLOSE STATUS IS OF NO IMPORTANCE TO THIS ROUTINE. 

DCLOSE STX TEMP 


PILOT — H. B. STEWART 


BOFF 84 A2 


STY 


TEMP+1 


i NOTE: CLOSE STATUS IS OF NO IMPORTANCE TO THIS ROUTINE. 

BOFD 86 A1 DCLOSE STX TEMP 


PILOT — H. B. STEWART 


BOFF 
B 101 
B 1 03 

84 

A9 

9D 

A2 

OC 

42 

03 

STY 

LDA 

STA 

TEMP+1 
#CLOSE 
ICCOM, X 

B 1 06 

20 

56 

E4 

JSR 

CIO 

B 109 

20 

72 

B8 

JSR 

AUDCLR 


B IOC 

B IOC A6 A 1 
BlOE A4 A2 
B 1 10 60 


i CLEAR AUDIO REGISTERS. 


*** EXTERNAL ENTRY POINT *** 


D0P010 
DI0010 LDX 
LDY 
RTS 


TEMP 

TEMP+1 


i RESTORE REGISTERS. 


DIN & DOUT — I OCB DATA IN AND OUT 
CALLING SEQUENCE: 

'IQEDIS' O 0 INDICATES TO IGNORE I/O ERROR. 

X = I OCB INDEX 
A = DATA ('DOUT' ONLY) 






JSR 

DIN/DOUT 





A « 

DATA ( 'DIN' 

Bill 
B 1 12 
B 1 1 4 

48 

A9 

DO 

07 

03 

DIN 

PHA 

LDA 

BNE 

#GETC 

DI0003 

B 1 16 
B1 17 

48 

A9 

OB 

DOUT 

PHA 

LDA 

#PUTC 

B 1 19 
B 1 1C 
BUD 
B11F 

9D 

68 

86 

84 

42 03 

A 1 
A2 

D I 0003 

STA 

PLA 

STX 

STY 

ICCOM/ X 

TEMP 

TEMP+1 


i SETUP COMMAND BYTE. 
; (BRA). 


SAVE DATA BYTE. 
SETUP COMMAND BYTE. 


SAVE REGISTERS. 


B 121 20 56 E4 

B 124 84 E4 

B 126 10 E4 

B 128 A9 9B 
B12A CO 88 
B12C DO B8 

B12E FO DC 


DI0005 JSR 
>TY 


*S«. 


S' 
CPY 
BPL 

LDA 

CPY 

BNE 

BEG 


CIO 

IOSTAT 

#0 

D I 00 10 

#EOL 

#$88 

D0P005 

DI0010 


SAVE I/O STATUS. 

CHECK STATUS. 

0. K. 

RETURN EOL ON ERROR. 
^ D -- F FATAL ? ERROR (SKIP BRANCH) 

YES — RETURN EOL (BRA). 


i 


PILOT 


H B STEWART 


, TIN — GRAPHICS DATA INPUT 


, CALLING SEQUENCE 

# 

i J SR TIN 

i 

i A ■ ONE GRAPHICS PIXEL 


i 


B 1 30 

86 

A 1 


TIN 

STX 

TEMP 

B 1 32 

84 

A2 



STY 

TEMP+1 

B 1 34 

A2 

14 



LDX 

4SGETC- I OVBAS 

B 1 36 

20 

73 

B 1 


JSR 

IOHAND 

B 1 39 

4C 

7B 

AF 


JMP 

IOERCK 


i SAVE REGISTERS. 
i GET CHARACTER FROM 'S', 
i CHECK FOR ERROR h RETURN 


i TOUT — GRAPHICS DATA OUTPUT 


j 

i CALLING SEQUENCE: 


I 

i A = ONE GRAPHICS PIXEL 






* 

i 

JSR 

TOUT 


B13C 

86 

A 1 


J 

TOUT 

STX 

TEMP 

i 

B13E 

84 

A2 



STY 

TEMP+ 1 


B 1 40 

A2 

16 



LDX 

#SPUTC— IOVBAS 

i 

B 1 42 

20 

73 

B 1 


JSR 

IOHAND 


B 145 

4C 

7B 

AF 


JMP 

IOERCK 

j 


SAVE REGISTERS. 

PUT CHARACTER TO 'S: '. 
CHECK FOR ERROR St RETURN. 


B 1 48 

A9 

60 


BUFPNT LDA 

B14A 

9D 

44 

03 

STA 

B14D 

A9 

05 


LDA 

B14F 

9D 

45 

03 

STA 

B 1 52 

60 



RTS 


#OPNBUF ; POINT TO NAME BUFFER FOR OPEN. 

ICBAL# X 
#0PNBUF/256 
ICBAH, X 


B 1 53 84 AA 
B 155 B5 80 
B 1 57 85 A 7 
B 1 59 B5 81 
B15B 85 AS 
B15D B5 83 
B15F 85 A9 
B 161 B4 82 


B 163 C4 A9 


PRTSTG — PRINT TEXT DATA 


CALLING SEQUENCE: 


X = OFFSET TO TEXT DATA POINTER. 
JSR PRTSTG 


PRTSTG STY TEMP2+3 

LDA DTAB, X i MOVE POINTER. 

STA TEMP2 

LDA DTAE + 1* X 

STA TEMP2+1 

LDA DTAB+3, X ; ENDING INDEX. 

STA TEMP2+2 

LDY DTAB+2, X i STARTING INDEX. 


PRS010 CPY 


TEMP2+2 


; COMPARE START INDEX 


WITH END INDEX. 


PILOT — H. B. STEWART 


B 165 FO 09 


BEQ 


PRS080 


; EQUAL. 


DONE. 


B 163 C4 

A9 

PRS010 

CPY 

l / i n u ^ e» / a 

TEMP2+2 

i SlftKI 1IN« INDEX. 

« COMPARE START INDEX WITH END INDEX 

PILOT — H. B 

STEWART 





B 165 FO 

09 


BEQ 

PRS080 

J EQUAL — DONE. 

B 167 B 1 
B 169 C8 

A7 


LDA 

INY 

( TEMP2 ) / Y 

i GET NEXT CHARACTER. 

B16A 20 
B16D 4C 

6F AF 
63 B 1 


JSR 

JMP 

CHOT 

PRS010 

; PRINT CHARACTER. 

B 1 70 A4 
B 1 72 60 

AA 

PRS080 

LDY 

RTS 

TEMP2+3 



; IOHAND — DIRECT I/O TO INTERFACE ROUTINE 

/ 

; CALLING SEQUENCE: 


i 






i 

X = I/O 

ROUTINE OFFSET 

TO 

ADDRESS TABLE ENTRY 





i 

JSR 

IOHAND 







i 

t 

i 

CLOBBERS 

Y REGISTER. 



B 173 

AS 



IOHAND 

TAY 


# 

SAVE REGISTER A. 

B 1 74 

BD 

01 

E4 


LDA 

IOVBAS+1, X 

i 

GET ADDRESS MSB. 

B 1 77 

48 




PHA 




B 1 78 

BD 

00 

E4 


LDA 

IOVBAS+O, X 


GET ADDRESS LSB. 

B17B 

48 




PHA 




B17C 

98 




TYA 


t 

RESTORE REGISTER A. 

B17D 

60 




RTS 


i 

(JMP) TO HANDLER. 





PILOT 


H B STEWART 



4 

SENA ME OET DEVICE NAME AND STORE IN 'OPNBUF 


CALLING SEQUENCE 



EXEC • 0 FOR SCAN MODE. ELSE EXECUTE 

- WUPMT 1 1*IF IfcinFK 

- INDEX TO EOL IN 'OPNBUF'. V 


SFNAME 
ERROR < A 


ERROR CODE). 


'OPNBUF' - DEVICE NAME. 

/jtX'JQt*- INPUT LINE INDEX TO FIELD AFTER DEVICE/FILENAME 


B17E 20 E8 A4 

SFNAME 

JSR 

ATOM 

« 

GET DEVICE/FILENAME 

B 181 DO OA 


BNE 

SFN090 

j 

ERROR 

B 183 C9 20 


CMP 

#TEXT 

< 

TEXT LITERAL? 

B 189 FO 07 


BEQ 

SFN100 

i 

YES. 

B 187 29 18 


AND 

#SVAR+USVAR 

9 

STRING NAME? 

B 189 DO OB 


BNE 

SFN200 

i 

YES. 

B18B A9 02 


LDA 

# I MPERR 

9 

NO — ERROR. 

B18D 60 

SFN090 

RTS 


9 

RETURN WITH CC SET. 


i SCAN 

TEXT 

LITERAL DATA TO 

EXTRACT DEVICE/FILENAME. 

B18E 20 9F BO 

SFN100 

JSR 

FNAME 

9 

NAME TO 'OPNBUF'. 

B191 84 F8 


STY 

XXXX 

9 

SAVE LINE INDEX. 

B 193 A9 00 


LDA 

#0 

9 

SET CC FOR NORMAL EXIT. 

B195 60 


RTS 


$ 

RETURN WITH CC SET. 


; DEVICE/FILENAME IS A STRING VARIABLE VALUE 

B 1 96 A5 92 

SFN200 

LDA 

EXEC 

9 

EXECUTE MODE? 

B 198 FO F3 


BEQ 

SFN090 

9 

NO — DONE. 

B19A 84 F8 


STY 

XXXX 



B19C A2 00 


LDX 

#0 



B19E A4 C4 


LDY 

DP +2 



B 1 AO C4 C5 

SFN220 

CPY 

DP+3 

9 

DONE? 

B1A2 FO OB 


BEQ 

SFN250 

j 

YES. 

B1A4 B 1 C2 


LDA 

(DP), Y 

i 

NO — MOVE NAME. 

B1A6 9D 60 05 


STA 

OPNBUF, X 



B1A9 CS 


INY 




B1AA E8 


I NX 




B1AB EO OF 


CPX 

#DNSI ZE 

9 

OVERLENGTH NAME? 

B 1 AD DO FI 


BNE 

SFN220 

i 

0. K. SO FAR. 

B1AF A9 9B 

SFN250 

LDA 

#EQL 



B1B1 9D 60 05 


STA 

OPNBUF, X 



B1B4 A9 00 


LDA 

#0 

9 

SET CC FOR NORMAL EXIT. 

B1B6 60 


RTS 


9 

RETURN WITH CC SET. 


PILOT 


H. B. STEWART 


1 


PILOT — H. B STEWART 


B1EC 68 
B1ED AA 
B1EE A4 F8 
B1FO A9 00 

B1F2 60 


SCNDEV — GET DEVICE NAME AND SETUP FOR 'READ: 'WRITE: ' OR 'CLOSE: ' 
CALLING SEQUENCE: 

'EXEC' = 0 FOR SCAN MODE, ELSE EXECUTE 
V = INPUT LINE INDEX. 

A = AUX 1 OPEN CODE. (0 = CLOSE, ELSE OPEN). 

; SAVE DEVICE OPEN CODE, 
i EXTRACT FILENAME. 

; ERROR. 

; EXECUTE MODE? 

; NO — ALL DONE. 

; DELIMIT DEVICE NAME AS STRING NAME. 

; CLEAR I/O STATUS. 


i PREFIX NAME WITH '@ 


B1B7 85 EO 

SCNDEV STA 

LE 

B1B9 20 7E B 1 

JSR 

SFNAME 

B1BC DO 34 

BNE 

SCD290 

B1BE A5 92 

LDA 

EXEC 

B ICO FO 30 

BEQ 

SCD290 

B1C2 A9 00 

LDA 

#0 

B1C4 85 E4 

STA 

IOSTAT 

B1C6 85 CO 

STA 

NP+2 

B1C8 E8 

I NX 


B1C9 86 Cl 

STX 

NP+3 

B1CB A9 40 

LDA 

#'@ 

B1CD 8D 5F 05 

STA 

OPNBUF-1 

B IDO A9 5F 

LDA 

#0PNBUF~1 

B1D2 85 BE 

STA 

NP 

B1D4 A9 05 

LDA 

#OPNBUF- 1/256 

B1D6 85 BF 

STA 

NP + 1 

B1D8 20 9B B7 

JSR 

SETSVL 

B1DB 20 81 B2 

JSR 

SFIND 

BIDE DO 13 

BNE 

SCD300 

B1E0 A4 C4 

LDY 

DP+2 

B1E2 B 1 C2 

LDA 

(DP), Y 

B1E4 48 

PHA 


B1E5 A5 EO 

LDA 

LE 

B1E7 DO 03 

BNE 

SCD270 

B1E9 20 9F B2 

JSR 

SDELET 


SETUP TO ACCESS STRING VARIABLE LIST. 
SEE IF STRING EXISTS. 

NO. 

; YES — GET IOCB INDEX FROM VALUE. 


; LOOK AT "OPEN" CODE. 

; NORMAL IN OR OUT. 

; 'DONE' — DELETE NAME. 


SCD270 


XXXX 

#0 


SCD290 RTS 


; SET CC FOR NORMAL EXIT. 
; RETURN WITH CC SET. 



B1F3 

20 

6C 

B2 

SCD300 

JSR 

CHKDEV 

• 

B1F6 

A5 

EO 



LDA 

LE 


B1F8 

DO 

05 



BNE 

SCD310 

# 

B1FA 

A4 

F8 



LDY 

XXXX 


B1FC 

A9 

02 



LDA 

#IMPERR 


B1FE 

60 




RTS 


t 

BIFF 

20 

26 

B2 

SCD310 

JSR 

FNDIOB 

« 

B202 

DO 

21 



BNE 

SCD900 


; FIRST ACCESS TO DEVICE, DO IMPLICIT OPEN. 

; CHECK FOR VALID DEVICE. 

; CHECK "OPEN" CODE. 
i NORMAL IN OR OUT. 

; RESTORE INDEX. 

; 'DONE' — CLOSING NON-OPEN FILE. 

; FIND A FREE IOCB, IF AVAILABLE. 

; NONE AVAILABLE. 


PILOT 


H B STEWART 


0304 A9 EO 
8206 20 B7 BO 

0209 86 OE 
B20B BE FO 02 

B20E A9 D£ 

B210 89 C2 
B212 A 9 00 
B214 89 C3 

i *S* 

8216 89 C4 
B218 A9 01 
B21A 89 C 9 

B21C 20 B8 B2 
B21F 08 
B220 A6 DE 
B222 A4 F8 
B224 28 

B229 60 SCD900 


i FNDIOB 


LDA 

LE 

1 

JSR 

DOPEN 

1 

STX 

LS 

i 

STX 

CRSINH 

i 

LDA 

*LS 


STA 

DP 


LDA 

•LS/296 


STA 

DP* 1 


LDA 

•0 


STA 

DP *2 


LDA 

• 1 


STA 

DP *3 


JSR 

SINSRT 

i 

PHP 

LDX 

LS 


LDY 

xxxx 


PLP 

RTS 


i 


— FIND A FREE IOCB 


GET AUX 1 OPEN CODE 
OPEN DEVICE 


SAVE IOCB • ASSOCIATED WITH DEVICE 
INHIBIT CURSOR JUST IN CASE 


INSERT NAMED STRING CONTAINING INFO 


RETURN WITH CC SET. 


i CALLING SEQUENCE: 


i 






i 

JSR 

FNDIOB 








» 

i 

i 

i 

FNDIOB 

BNE 

NO FREE IOCB 

(A = 

ERROR CODE) 






X = = 

IOCB INDEX. 




B226 

A2 

40 


LDX 

# I 0CB4 

i 

START WITH IOCB #4. 


B228 

B22B 

BD 

C9 

40 

FF 

03 

FND010 

LDA 

CMP 

ICHID/ X 
#$FF 

i 

TEST FOR CURRENTLY 

UNUSED 

B22D 

FO 

07 



BEQ 

FND090 

i 

FOUND ONE. 


B22F 

B232 

20 

DO 

42 

F4 

B2 


JSR 

BNE 

NXTIOB 

FND010 

9 

9 

BUMP INDEX TO NEXT 
MORE TO CHECK. 

IOCB. 

B234 

A9 

96 



LDA 

#FILERR 

9 

NONE AVAILABLE. 


B236 

60 



FND090 

RTS 


9 

RETURN WITH CC SET. 



B237 A2 30 


; CLOSEM — CLOSE IOCBS 3 THROUGH 7 (WHETHER OPEN OR NOT). 

I 

CLOSEM LDX #I0CB3 ; START WITH IOCB #3. 


B239 

20 

FD 

BO 

CLM010 JSR 

DCLOSE 

B23C 

20 

42 

B2 

JSR 

NXTIOB 

B23F 

DO 

F8 


BNE 

CLM010 














CLOSE THE IOCB. 

BUMP INDEX TO NEXT IOCB. 
MORE TO DO. 


PILOT — H. B. STEWART 



B241 60 


RTS 


B23F DO F8 




I IUIM- I u t-r w . 






<% PILOT 


H. B. STEWART 


I 


B241 60 


RTS 




t 


NXTIOB — BUMP INDEX TO NEXT I0CB. 
CALLING SEQUENCE: 


X = I OCB INDEX 


# 

# 


B242 8A NXTIOB 

B243 18 

B244 69 10 

B246 AA 

B247 EO 80 


JSR NXTIOB 

BEQ INDEX PAST IOCB #7 

X = IOCB INDEX TO NEXT IOCB 

TXA 

CLC 

ADC #IOCBSZ 

TAX 

CPX #I0CB7+I0CBSZ 


B249 
B249 
B249 60 


RDV090 

CKD090 

RTS 


RETURN WITH CC SET. 


REMDEV — REMOVE DEVICE ASSIGNMENTS FROM STRING LIST 


B24A 

B24C 

B24E 

A2 

AO 

20 

52 

3A 

CF 

B3 

RDVOOO 

LDX 

LDY 

JSR 

#MEMA-DTAB 

#LP-DTAB 

DMOVI 

i 

REMOVE STRING VAR FROM LIST. 

B251 

20 

A4 

B4 


JSR 

MDEALL 



B254 

B257 

20 

A2 

9B 

3A 

B7 

REMDEV 

JSR 

LDX 

SETSVL 

#LP-DTAB 

i 

9 

SETUP TO SCAN STRING VARIABLES 

TO REMOVE ALL DEVICE ASSIGNMENTS 

B259 

B25C 

20 

FO 

9D 

EB 

B3 

RDV010 

JSR 

BEQ 

SEND 

RDV090 

9 

9 

END OF LIST? 
YES. 

B25E 

B260 

B262 

B264 

AO 
B 1 
C9 
FO 

03 

BA 

40 

E4 



LDY 

LDA 

CMP 

BEQ 

#3 

( LP ) > Y 

# 

RDVOOO 

9 

9 

9 

NO — LOOK AT 1ST CHARACTER OF NAME. 

IS IT '©' (I/O ASSIGNMENT)? 

YES — REMOVE IT FROM LIST. 

B266 

B269 

20 

4C 

10 

59 

B4 

B2 


JSR 

JMP 

SNXTI 

RDV010 

9 

GO TO NEXT ITEM IN LIST. 


B26C AD 54 05 
B26F FO D8 


; CHKDEV — CHECK FOR VALID DEVICE 


CHKDEV LDA GRFLAG 

BEQ CKD090 


GRAPHICS SCREEN? 

NO — NO RESTRICTIONS. 




B27 1 AD 60 05 
B274 C9 45 


LDA 

CMP 


OPNBUF 
# 'E 


; CHECK FOR ' E ' OR 'S'. 












jgpF. | 




wmm 


PILOT 


H B. STEWART 




B276 FO 04 


B278 C9 53 
B27A DO CD 






B27C A9 89 
B27E 4C 6C A1 








BEQ 

CKD010 

* 

CMP 

#'S 


BNE 

CKD090 


LDA 

KSCNERR 


JMP 

PSTOP 





i INVALID - 


CLOBBERS SCREEN 




























































































































































































































PILOT 


H. B. STEWART 


/ 

i 

i 

i 

i 

i 


THIS PACKAGE HAS THREE LEVELS OF STRING HANDLING ROUTINES: 
NAMED STRING HANDLING — SFIND, SDELET & SINSRT 







TEXT DATA HANDLING — SCOMP 

IMPLEMENTATION UTILITIES — IFIND, SEND, PSETUP, PMOVE, ICOMP, 

ILENG, SNXTI, I MATCH Zt I ALLOC 














PILOT 


H B STEWART 


i NAMED STRING HANDLING 

i 

i THESE ROUTINES USE THE FOLLOWING VARIABLES: 

i 

i NP - POINTER TO STRING NAME. 

» DP - POINTER TO STRING DATA PORTION. 

LP - POINTER TO START OF LIST OF NAMED STRINGS (S1L OR S2L ) 


'• SFIND — FIND NAMED STRING IN LIST 

i 

CALLING SEQUENCE: 

LP POINTS TO START OF LIST OF NAMED STRINGS 
NP POINTS TO NAME TO FIND IN LIST 

JSR SFIND 

BNE NAME NOT IN LIST OR NAME IS NULL 


DP POINTS TO DATA PORTION OF NAMED STRING FOUND IN LIST 


B281 20 FE 

B2 

SFIND 

JSR 

IFIND 

i 

FIND NAME IN LIST. 

B284 DO 18 



BNE 

SF I 080 

i 

NOT FOUND. 

B286 A2 42 



LDX 

#DP— DTAB 

i 

SET 7 DP ' TO POINT TO DATA 

B288 AO 4E 



LDY 

#PP— DTAB 



B28A 20 CF 

B3 


JSR 

DMOVI 



B28D A5 D1 



LDA 

PP+3 

> 

SKIP OVER NAME PORTION. 

B28F 20 51 

B6 


JSR 

DADDP 


\ 

B292 A9 01 



LDA 

#1 

# 

SET START INDEX. 

B294 85 C4 



STA 

DP+2 



B296 AO 00 



LDY 

#0 

i 

SET END INDEX. 

B298 18 



CLC 




B299 71 C2 



ADC 

(DP), Y 



B29B 85 C5 



STA 

DP+3 



B29D 98 



TYA 


9 

SET CC FOR EXIT. 

B29E 60 


SFI080 

RTS 


9 

RETURN WITH CC SET. 


PORTION 


; SDELET — DELETE NAMED STRING FROM LIST 

9 

; CALLING SEQUENCE: 

i 

i NP POINTS TO STRING NAME 

; LP POINTS TO START OF LIST OF NAMED STRNGS 

( 

i JSR SDELET 

BNE NAMED STRING NOT FOUND OR NAME IS NULL 


PILOT 


H. B. STEWART 


JSR SDELET 

BNE NAMED STRING NOT FOUND OR NAME IS NULL 


PILOT — H. B. STEWART 


B29F 

20 

FE 

B2 

SDELET 

JSR 

IFIND 

) 

FIND STRING IN LIST. 

B2A2 

DO 

13 



BNE 

SDL090 

I 

NAMED STRING NOT FOUND. 





i •#•*# 

EXTERNAL 

ENTRY POINT *** 



B2A4 

A2 

52 


SDEL2 

LDX 

#MEMA~DTAB 

i 

MEMA = PP < FOR DEALLOCATE CALL) 

B2A6 

AO 

4E 



LDY 

#PP-DTAB 



B2AS 

20 

CF 

B3 


JSR 

DMOVI 



B2AB 

20 

A4 

B4 


JSR 

MDEALL 

# 

DELETE STRING. 

B2AE 

A2 

4E 



LDX 

#PP-DTAB 

i 

PP " MEMA. 

B2B0 

AO 

52 



LDY 

4MEMA-DTAB 



B2B2 

20 

CF 

B3 


JSR 

DMOVI 



B2B5 

A9 

00 



LDA 

#0 


SET CC FOR NORMAL EXIT. 

B2B7 

60 



SDL090 

RTS 


i 

RETURN WITH CC SET. 


SINSRT — NAMED STRING INSERT 

CALLING SEQUENCE: 

NP POINTS TO STRING NAME 

DP POINTS TO STRING DATA PORTION 

LP POINTS TO START OF NAMED STRING LIST 

JSR SINSRT 

BNE NAME IS NULL# OR NO ROOM FOR STRING IN LIST 


B2B8 20 FE B2 

SINSRT 

JSR 

IFIND 

B2BB DO 03 


BNE 

SIN020 

B2BD 20 A4 B2 


JSR 

SDEL2 

B2C0 A9 00 

SIN020 

LDA 

#0 

B2C2 85 D4 


STA 

MEMB 

B2C4 85 D5 


STA 

MEMB+1 

B2C6 A2 54 


LDX 

#MEMB-DTAB 

B2C8 38 


SEC 


B2C9 A5 Cl 


LDA 

NP+3 

B2CB E5 CO 


SBC 

NP+2 

B2CD 20 51 B6 


JSR 

DADDP 

B2D0 38 


SEC 


B2D1 A5 C5 


LDA 

DP +3 

B2D3 E5 C4 


SBC 

DP+2 

B2D5 20 51 B6 


JSR 

DADDP 

B2D8 A9 04 


LDA 

#4 

B2DA 20 51 B6 


JSR 

DADDP 

B2DD A2 52 


LDX 

#MEMA“DTAB 

B2DF AO 4E 


LDY 

#PP-DTAB 

B2E1 20 CF B3 


JSR 

DMOVI 


; IS NAME ALREADY IN LIST? 

; NO. 

; YES — DELETE OLD OCCURRENCE. 
; CALCULATE ALLOCATION SIZE. 

; STRING SIZE = NAME SIZE ... 


; . . . + DATA PORTION SIZE . . . 

; ... +4 BYTES OF OVERHEAD. 

; ALLOCATE ADDRESS FROM 7 IF IND 7 CALL IN PP 


PILOT 


H. B. STEWART 


B2E4 20 27 B4 
B2E7 DO OE 


^SR MALLOC 

BNE SIN090 


ALLOCATE SPACE. IN LIST 
NOT ENOUGH ROOM. 


B2E9 A2 3E 
B2EB AO 02 
B2ED 20 DA B3 


LDX #NP— DTAB 

LDY #2 

JSR SMOVI 


MOVE NAME TO NEW STRING 
. . . STARTING AFTER ALLOCATION SIZE. 


B2F0 A2 42 
B2F2 20 DA B3 


LDX #DP— DTAB ; NOW MOVE DATA PORTION 

JSR SMOVI 


B2F5 A9 00 


LDA #0 


SET CC FOR NORMAL EXIT. 


B2F7 60 


SIN090 RTS ; RETURN WITH CC SET. 




PILOT 


H. B. STEWART 


TEXT DATA UTILITIES 

THESE ROUTINES USE THE FOLLOWING VARIABLES: 


DP = POINTER TO TEXT DATA 

MP = POINTER TO TEXT PATTERN DATA 

API = AUXILLIARY POINTER TO TEXT SUB-STRING 

AP2 = AUXILLIARY POINTER TO TEXT SUB-STRING 


# 


SCOMP — COMPARE TWO TEXT STRINGS 

CALLING SEQUENCE: 

DP POINTS TO DATA TEXT 
MP POINTS TO DATA TEXT 

JSR SCOMP 

BEQ DATA TEXTS ARE IDENTICAL 

BCS DP TEXT >= MP TEXT 

BCC DP TEXT < MP TEXT 



B2FS 20 B7 B3 
B2FB 4C 34 B3 


NOTE: THE COMPARISON IS BASED UPON THE STANDARD ATASCII COLLATION 

SEQUENCE; WHEN ONE TEXT IS A SUBSET OF THE FIRST PART OF THE 
OTHER TEXT , THE SHORTER ONE IS CONSIDERED TO BE < THE LONGER ONE. 


SCOMP JSR PSETUP 


ICOMP 



DP TO SP, MP TO PP. 


COMPARE TEXT & RETURN WITH CC SET. 









I 


PILOT 


H. B. STEWART 


B2FE A5 CO 
B300 C5 Cl 
B302 FO 2D 

B304 A2 4A 
B306 AO 3E 
B308 20 C5 B3 

B30B A2 4E 
B30D AO 3A 
B30F 20 C5 B3 

B312 

B312 20 9D B3 
B31 5 FO 1A 

B317 A9 03 
B319 85 DO 
B31B 18 
B31C AO 02 
B31E 71 CE 
B320 85 D1 


B322 20 34 B3 
B325 FO OC 

B327 90 08 

B329 A2 4E 
B32B 20 10 B4 

B32E 4C 12 B3 

B331 A9 FF 

B333 60 


i 

i 

i 

i 

i 


GENERAL STRING IMPLEMENTATION UTILITIES 

THESE ROUTINES USE THE FOLLOWING VARIABLES: 

SP * SOURCE TEXT POINTER 
PP » PATTERN TEXT POINTER 


i IFIND — FIND NAMED STRING IN LIST 

i 

; CALLING SEQUENCE: 

# 

i NP POINTS TO DESIRED NAME 

i LP POINTS TO START OF NAMED STRING LIST 

i 

i JSR IFIND 

1 BNE NOT FOUND (PP POINTS TO SUCCESSOR) 

PP POINTS TO NAMED STRING IN LIST 


LDA 

NP+2 

; NAME NULL? 

CMP 

NP+3 


BEQ 

IF 1080 

; YES — DONE 

LDX 

#SP— DTAB 

; SP = NP. 

LDY 

#NP-DTAB 


JSR 

PMOVE 


LDX 

#PP— DTAB 

; PP = LP. 

LDY 

#LP~DTAB 


JSR 

PMOVE 



IFI020 


; *S* 




IF 1080 
IF 1090 


LDX 

#PP— DTAB 




JSR 

SEND 

# 

END 

OF LIST? 

BEQ 

IF I 080 

J 

YES 

— DONE. 

LDA 

#3 

i 

NO - 

- SETUP START INDEX . . . 

STA 

PP+2 




CLC 


1 

• • • 

& END INDEX (TO NAME). 

LDY 

#2 




ADC 

(PP), Y 




STA 

P P+3 




JSR 

I COMP 

i 

NAME 

COMPARISON. 

BEQ 

IF I 090 

J 

FOUND IT! 

BCC 

IF I 080 

# 

PAST 

CORRECT SPOT IN ORDERED 

LDX 

#PP-DTAB 

i 

SKIP 

TO NEXT LIST ENTRY. 

JSR 

SNXTI 




JMP 

IF 1020 

# 

TRY 

AGAIN. 

LDA 

#$FF 

# 

SET 

CC FOR EXIT (NOT FOUND). 

RTS 



RETURN WITH CC SET. 


B333 60 


I FI 090 RTS 


i RETURN WITH CC SET. 


PILOT — H. B. STEWART 


B334 20 A9 B3 
B337 FO 3B 

B339 BO ID 


B33B 

B33D 

B33F 

B340 

B342 

B344 

B345 

B347 


A5 D1 
85 A 7 
38 

A5 CD 
E5 CC 
18 

65 DO 
85 D1 


B349 20 74 B3 
B34C 08 
B34D A5 A7 
B34F 85 D1 
B351 28 
B352 DO IF 

B354 A9 FF 
B356 18 
B357 60 


ICOMP — COMPARE TEXT DATA 

CALLING SEQUENCE: 

SP POINTS TO DATA TEXT 
PP POINTS TO DATA TEXT 


ICOMP 


B358 

B35A 

B35C 

B35D 

B35F 

B361 

B362 

B364 


A5 CD 
85 A7 
18 

A5 CC 
65 D1 
38 

E5 DO 
85 CD 


B366 20 74 B3 
B369 08 
B36A A5 A7 
B36C 85 CD 
B36E 28 
B36F DO 02 

B37 1 A9 FF 


I COO 50 


JSR 

ICOMP 



BEQ 

DATA TEXTS ARE IDENTICAL 

BCS 

SP DATA 

>= PP DATA 

BCC 

SP DATA 

< PP DATA 


JSR 

ILENG 

i 

SEE IF EQUAL LENGTHS. 

BEQ 

IMATCH 

i 

YES — COMPARE & RETURN. 

BCS 

IC0050 

# 

PP DATA SHORTER THAN SP DATA. 

LDA 

PP+3 

i 

SAVE STARTING VALUE. 

STA 

TEMP2 



SEC 


i 

(CLEAR BORROW). 

LDA 

SP+3 

i 

ADJUST PP DATA LENGTH FOR COMPAR 

SBC 

SP+2 



CLC 




ADC 

PP+2 



STA 

PP+3 



JSR 

IMATCH 

i 

NOW COMPARE. 

PHP 




LDA 

TEMP2 

i 

RESTORE ALTERED PARAMETER. 

STA 

PP+3 



PLP 




BNE 

IC0090 

* 

NOT EQUAL. — CC SET FOR EXIT. 

r LDA 
n r 

#*FF 

9 

SET CC FOR EXIT .J 

RTS 


9 

RETURN WITH CC SET. 

LDA 

SP+3 

9 

SAVE STARTING VALUE. 

STA 

TEMP2 



CLC 




LDA 

SP+2 

9 

ADJUST SP LENGTH FOR COMPARISON 

ADC 

PP+3 



SEC 




SBC 

PP+2 



STA 

SP+3 



JSR 

IMATCH 

9 

NOW COMPARE. 

PHP 




LDA 

TEMP2 

9 

RESTORE ALTERED PARAMETER. 

STA 

SP+3 



PLP 




BNE 

IC0090 

9 

NOT EQUAL — CC SET FOR EXIT. 

LDA 

#$FF 

i 

SET CC FOR EXIT. 

SEC 





; *S* 


J 


PILOT 


H. B, STEWART 


0 



B373 60 


B374 A5 CC 
B376 85 A 1 
B378 A5 DO 
B37A 85 A2 

B37C A4 DO 
B37E C4 D1 
B380 FO 10 

B382 A4 CC 
B384 B 1 CA 
B386 E6 CC 

B388 A4 DO 
B38A D1 CE 
B38C DO 04 

B38E E6 DO 
B390 BO EA 

B392 08 
B393 A5 A1 
B395 85 CC 
B397 A5 A2 
B399 85 DO 
B39B 28 

B39C 
B39C 60 




IC0090 RTS 


RETURN WITH CC SET 


i 

$ 

i 


IMATCH — MATCH TWO TEXT DATA STRINGS 
CALLING SEQUENCE 


SP - SOURCE DATA TEXT (SOURCE DATA MUST BE LONGER THAN PATTERN) 
PP = PATTERN DATA TEXT 


; 


JSR IMATCH 

BEQ PATTERN IS CONTAINED WITHIN SOURCE 

BCS SOURCE COLLATES >= PATTERN 

BCC SOURCE COLLATES < PATTERN 


IMATCH LDA SP+2 

STA TEMP 

LDA PP+2 

STA TEMP+1 


SAVE STARTING INDICES. 


IMT010 LDV PP+2 

CPY PP+3 

BEQ IMT090 


SEE IF ALL OF PATTERN HAS MATCHED. 
YES — ALL DONE. 


LDY SP+2 ; NO — COMPARE ANOTHER BYTE. 

LDA ( SP ) i Y 

INC SP+2 


LDY PP+2 

CMP ( PP ) i Y 

BNE IMT090 ; NO COMPARE — CC SET FOR EXIT. 


INC PP+2 

BCS IMT010 ; (BRA). 


IMT090 PHP 

LDA TEMP 

STA SP+2 

LDA TEMP+1 

STA PP+2 

PLP 


; SAVE CC. 

; RESTORE STARTING INDICES. 


; RESTORE CC. 


SEN090 

RTS 


; RETURN WITH CC SET. 


SEND — CHECK FOR END OF STRING LIST 
CALLING SEQUENCE: 

X = DTAB OFFSET TO LIST POINTER 
JSR SEND 

BEQ END OF LIST REACHED 

Y IS ALTERED 





PILOT 


H. B. 


STEWART 


B39D 

AO 

30 


SEND 

LDY 

B39F 

20 

63 

B5 


JSR 

B3A2 

FO 

FS 



BEQ 

B3A4 

AO 

34 



LDY 

B3A6 

4C 

63 

B5 


JMP 


#S1H-DTAB 
DCMP I 
SEN090 

4S2H-DTAB 
DCMP I 


; SEE IF END OF REGION #1. 

; YES. 

; SEE IF END OF REGION #2 . 
; ... RETURN WITH CC SET. 


ILENG — COMPARE LENGTHS OF SOURCE TEXT AND PATTERN TEXT 

CALLING SEQUENCE: 

SP POINTS TO SOURCE DATA TEXT 
PP POINTS TO PATTERN DATA TEXT 







JSR 


ILENG 







BEQ 


DATA TEXTS 

ARE EQUAL LENGTH 






BCS 


SOURCE TEXT 

>= PATTERN TEXT 






BCC 


SOURCE TEXT 

< PATTERN TEXT 

B3A9 

A5 

D1 


ILENG 

LDA 


PP+3 


B3AB 

38 




SEC 




B3AC 

E5 

DO 



SBC 


PP+2 


B3AE 

85 

A1 



STA 


TEMP 


B3B0 

A5 

CD 



LDA 


SP+3 


B3B2 

E5 

CC 



SBC 


SP+2 


B3B4 

E5 

A1 



SBC 


TEMP 

; CC = SP LENGTH - PP 

B3B6 

60 




RTS 

















PSETUP — 

MOVE POINTERS (DP TO SP, MP TO PP ) 





CALLING SEQUENCE: 







JSR 


PSETUP 







SP = 

DP 








PP = 

MP 



B3B7 

A2 

4A 

F 

J SETUP 

LDX 


#SP-DTAB 

; SP = DP. 

B3B9 

AO 

42 



LDY 


#DP~DTAB 


E3BB 

20 

C5 B3 



JSR 


PMOVE 


B3BE 

A2 

4E 



LDX 


#PP-DTAB 

; PP = MP. 

B3C0 

AO 

46 



LDY 


#MP-DTAB 


B3C2 

4C 

C5 B3 



JMP 


PMOVE 

; AND RETURN. 




/ 

i 

PMOVE 

— MOVE 

STRING/DATA 

TEXT POINTERS 


CALLING SEQUENCE: 


o 


PILOT — H. B STEWART 


# 

* 


r 





i 

i 

# 

i 

# 

# 


X » DTAB OFFSET 
Y « DTAB OFFSET 

JSR PMOVE 

DTAB ( X ) = DTAB(Y) (4 BYTE MOVE) 


B3C5 

B9 

82 

00 

PMOVE 

LDA 

DTAB+2* Y 

B3C8 

95 

82 



STA 

DTAB+2# X 

B3CA 

B9 

83 

00 


LDA 

DTAB+3, Y 

B3CD 

95 

83 



STA 

DTAB+3, X 





; *** 

EXTERNAL 

ENTRY POINT 

B3CF 

B9 

80 

00 

DMOVI 

LDA 

DTABi Y 

B3D2 

95 

80 



STA 

DTAB/ X 

B3D4 

B9 

81 

00 


LDA 

DTAB+1 / Y 

B3D7 

95 

81 



STA 

DTAB+1 / X 

B3D9 

60 




RTS 







. IF 

DEBUG 





i 

i I ALLOC — ALLOCATE MEMORY 

# 


; CALLING SEQUENCE: 

i 

i A = # OF BYTES TO ALLOCATE 


JSR 

BNE 


I ALLOC 

NOT ENOUGH ROOM 


DP POINTS TO NEW ALLOCATION + 2 (START OF STRING) 




I 1 I , 

PILOT — H. B. STEWART 



STA 

MEMB 

* 

LDA 

#0 


STA 

MEMB+1 


LDA 

#3 

i 

LDX 

#MEMB-DTAB 


JSR 

DADDS 


LDX 

#MEMA-DTAB 

i 

LDY 

#S2L-DTAB 


JSR 

DMOVI 


JSR 

MALLOC 

# 

BNE 

IAL090 

i 

LDX 

#DP-DTAB 

i 

LDY 

#MEMA-DTAB 


JSR 

DMOVI 


LDA 

#2 


JSR 

DADDS 



+ 3. 


; SETUP MEMA - ALLOCATION ADDRESS. 


NOT ENOUGH ROOM. 

DP = ADDRESS OF STRING STORAGE AREA 



PILOT 



I 



0 


f 

0 


0 


IAL090 


LDA 

#1 

STA 

DP+2 

STA 

DP+3 

LDA 

#0 

RTS 


. END IF 



; SET STARTING Z< ENDING INDICES. 


; SET CC FOR EXIT. 

; RETURN WITH CC SET. 


# 

i SMOVI MOVE TEXT DATA TO MEMA (FORMING STRING) 
; CALLING SEQUENCE: 

X = DTAB INDEX TO STRING POINTER 
Y = MEMA OFFSET TO START STORING 

VSR SMOVI 


MEMA = LAST LOCATION STORED INTO + 1 
Y = 0 


B3DA B5 80 
B3DC 85 A1 
B3DE B5 81 

SMOVI 

LDA 

STA 

LDA 

STA 

LDA 

STA 

DTAB, X 
TEMP 

DTAB+1, X 

i 

MOVE SOURCE POINTER TO TEMP. 

B3E0 85 A2 
B3E2 B5 82 
B3E4 85 A3 


TEMP+1 
DTAB+2, X 
TEMP+2 



B3E6 B5 83 


LDA 

DTAB+3, X 



B3E8 85 A4 


STA 

TEMP+3 



B3EA 38 


SEC 


i 

CALCULATE STRING LENGTH . . . 

B3EB A5 A4 


LDA 

TEMP+3 



B3ED E5 A3 


SBC 

TEMP+2 



B3EF 91 D2 

SM0010 

STA 

(MEMA), Y 

i 

... & STORE IN TARGET AREA. 

B3F1 C8 


INY 




B3F2 84 A5 


STY 

TEMP+4 

> 

SAVE INDEX. 

B3F4 A4 A3 


LDY 

TEMP+2 

j 

DONE? 

B3F6 C4 A4 


CPY 

TEMP+3 



B3F8 FO 08 


BEQ 

SM0090 

# 

YES. 

B3FA B 1 A 1 


LDA 

(TEMP), Y 

# 

NO — MOVE A BYTE. 

B3FC E6 A3 


INC 

TEMP+2 



B3FE A4 A5 


LDY 

TEMP+4 

i 

GET TARGET INDEX. 

B400 DO ED 


BNE 

SM0010 

# 

(BRA). 

B402 A9 00 

SM0090 

LDA 

#0 

# 

PREPARE FOR D. P. ADDITION. 

E404 85 A6 


STA 

TEMP+5 



B406 A2 52 


LDX 

#MEMA-DTAB 

i 

PREPARE TO BUMP MEMA. 

B408 AO 25 


LDY 

#TEMP+4-DTAB 



B40A 20 80 B5 


VSR 

DADDI 



B40D AO 00 


LDY 

#0 

# 

AS PROMISED. 

B40F 60 


RTS 



















PILOT — H. B STEWART 


PILOT — H. B. STEWART 


SNXTI — POINT TO NEXT STRING IN LIST 
CALLING SEQUENCE: 

X = DATA OFFSET TO STRING LIST POINTER 



; JSR 

SNXTI 


t 

i DTAB (X ) 

= POINTER 

B410 B5 81 

i 

SNXTI LDA 

DTAB+1 , X 

B412 85 A2 

STA 

TEMP+1 

B414 B5 80 

LDA 

DTAB, X 

B416 85 A1 

STA 

TEMP 

B418 AO 00 

LDY 

#0 

B41 A 18 

CLC 


B41B 71 A1 

ADC 

(TEMP), Y 

B41D 75 SO 

STA 

DTAB, X 

B41F C8 

INY 


B420 A5 A2 

LDA 

TEMP+1 

B422 71 A 1 

ADC 

(TEMP), Y 

B424 95 81 

STA 

DTAB+1, X 

B426 60 

RTS 



MOVE STRING POINTER TO TEMP. 


; ADD ADDRESS TO . . 


ALLOCATION LENGTH 
TO GET NEXT ADDRESS. 



























PILOT 


H B STEWART 


MEMORY MANAGEMENT PACKAGE 

AVAILABLE MEMORY IS DIVIDED INTO TWO REGIONS WHICH GROW TOWARD EACH 
OTHER i THE REGIONS ARE DEFINED BY FOUR POINTER VARIABLES: 


'S1L ' 
' S 1 H ' 
'S2L ' 
'S2H ' 


POINTS TO BOTTOM OF REGION #1 

POINTS TO FIRST UNUSED LOCATION ABOVE REGION #1 
POINTS TO BOTTOM OF REGION #2 

POINTS TO FIRST UNUSED LOCATION ABOVE REGION #2 


THREE ROUTINES ARE PROVIDED TO ALLOCATE AND DEALLOCATE MEMORY: 


'MALLOC ' 
'MDEALL ' 


IS USED TO ALLOCATE MEMORY 
IS USED TO DEALLOCATE MEMORY 


THE TWO REGIONS ARE MAINTAINED AS TWO COMPRESSED STACKS, ALLOCATION 
AND DEALLOCATION INVOLVES THE MOVEMENT OF DATA TO CREATE AND 
ELIMINATE HOLES IN THE STACKS. 


j MALLOC — MEMORY ALLOCATE 

I 

I CALLING SEQUENCE: 

'MEMA ' CONTAINS THE ADDRESS OF THE START OF ALLOCATION 
j REGION #1: DATA AT START ADDRESS AND ABOVE ARE MOVED UP 

i REGION #2: DATA BELOW START ADDRESS ARE MOVED DOWN. 

, 'MEMB ' CONTAINS THE NUMBER OF BYTES TO ALLOCATE 


JSR 

BNE 


MALLOC 

NOT ENOUGH MEMORY TO SATISFY ALLOCATION 


'MEMA' CONTAINS LOWEST ADDRESS IN THE ALLOCATED BLOCK 
FIRST TWO BYTES OF ALLOCATED BLOCK « BLOCK SIZE 


B427 

AO 

30 


MALLOC LDY 

#S1H-DTAB 

i 

ACC = S1H . . . 

B429 

20 

9E 

B6 

JSR 

DLOADA 



B42C 

AO 

54 


LDY 

#MEMB~DT AB 

i 

... + MEMB. 

B42E 

20 

AS 

B6 

JSR 

DADDA 



B431 

AO 

32 


LDY 

#S2L-DTAB 

i 

COMPARE ACC WITH S2L 

B433 

20 

AD 

B6 

JSR 

DCMPA 



B436 

BO 

69 


BCS 

MAL300 

l 

NOT ENOUGH ROOM. 

B438 

A2 

52 


LDX 

#MEMA-DTAB 

i 

SEE IF ALLOCATION IN 

B43A 

AO 

32 


LDY 

#S2L-DTAB 



B43C 

20 

63 

B3 

JSR 

DCMPI 



B43F 

BO 

28 


BCS 

MAL100 

} 

REGION #2. 





i ALLOCATE FROM REGION #1 



B441 

A2 

36 


LDX 

#MSP~DTAB 

J 

MSP ■ MEMA. 

B443 

AO 

32 


LDY 

#MEMA-DTAB 



B443 

20 

CF 

B3 

JSR 

DMOVI 




■ 1.0. OI twfln J 


B448 AS 58 
B44A 20 CF B3 

LDX 

JSR 

#MDP-DTAB 

DMOVI 

B44D AO 54 
B44F 20 80 B5 

LDV 

USR 

#MEMB-DTAB 

DADDI 

B452 A2 5A 
B454 AO 30 
B456 20 CF B3 

LDX 

LDV 

JSR 

#MBC-DTAB 

#S1H-DTAB 

DMOVI 

B459 AO 52 
B45B 20 90 B5 

LDY 

JSR 

#MEMA-DTAB 

DSUBI 

B45E AS 30 
B460 20 A3 B6 

LDX 

JSR 

#S 1 H-DT AB 
DSTORA 

B463 20 30 B5 

JSR 

MOVDA 

B466 4C 94 B4 

JMP 

MAL200 


; ALLOCATE IN REGION #2 


B469 AS 56 

MALI 00 LDX 

#MSP-DTAB 

B46B AO 32 

LDY 

#S2L-DTAB 

B46D 20 CF B3 

JSR 

DMOVI 

B470 AS 5A 

LDX 

#MBC-DTAE 

B 472 AO 52 

LDY 

#MEMA-DTAB 

B474 20 CF B3 

JSR 

DMOVI 

B477 AO 32 

LDY 

#S2L-DTAB 

B479 20 90 B5 

JSR 

DSUB I 

B47C A2 32 

LDX 

#S2L.~DT AB 

B47E AO 54 

LDY 

#MEMB-~DTAB 

B480 20 90 B5 

JSR 

DSUB I 

B483 A2 58 

LDX 

#MDP~DTAB 

B485 AO 32 

LDY 

#S2L-DTAB 

B487 20 CF B3 

JSR 

DMOVI 

B48A A2 52 

LDX 

#MEMA-DTAB 

B48C AO 54 

LDY 

#MEMB~DTAB 

B48E 20 90 B5 

JSR 

DSUBI 

B491 20 OC B5 

JSR 

i COMMON CODE 

MOVIA 

B494 AO 00 

MAL200 LDY 

#0 

B496 A5 D4 

LDA 

MEMB 

B498 91 D2 

STA 

(MEMA), Y 

B49A C8 

I NY 


B49B A5 D5 

LDA 

MEMB+1 

B49D 91 D2 

STA 

(MEMA), Y 

B49F 88 

DEY 


B4A0 60 

RTS 


B4A1 A9 89 

MAL300 LDA 

#INSERR 


i MDP = MEMA . . . 
i ... + MEMO. 

i MEC ■ S1H . . . 

i ... - MEMA. 

; S1H ~ ACC <= S1H + MEMB ) 

; MOVE DATA UPWARD. 

i MSP = SSL. 

; MEC = MEMA . . . 

i ... - SSL. 

; SSL = SSL - MEMB. 

; MDP = SSL (NEW VALUE). 

; MEMA = MEMA - MEMB. 

; MOVE DATA DOWNWARD. 

; MOVE BLOCK SIZE TO BLOCK. 

; SET CC FOR NORMAL EXIT. 

; SET CC FOR ERROR EXIT. 


PILOT 


H. B. STEWART 


i i uia c.nnun cai i. 


PILOT — H. B. STEWART 
B4A3 60 


RTS 


; liDEALL — MEMORY DEALLOCATE 

9 

} CALLING SEQUENCE: 

i 

; 'MEMA ' = ADDRESS OF BLOCK TO DEALLOCATE 

; FIRST 2 BYTES OF BLOCK = SIZE OF BLOCK 


JSR 

'MEMA 


B4A4 AO 00 
B4A6 B 1 D2 
B4A8 85 D4 
B4AA C8 
B4AB B 1 D2 
B4AD 85 D5 


MDEALL 


MDEALL 

= ADDRESS OF BLOCK FOLLOWING DEALLOCATED BLOCK (AFTER DEALL) 

#0 ; GET SIZE OF BLOCK TO MEMB. 

(MEMA), Y 
MEMB 

(MEMA), Y 
MEMB+1 



B4AF A2 52 

LDX 

#MEMA-DTAB 

9 

SEE IF IN 1 

• 

B4B 1 AO 32 

LDY 

#S2L-DTAB 




B4B3 20 63 B5 

JSR 

DCMPI 




B4B6 BO 2? 

BCS 

MDA100 

9 

REGION #2. 

• 








; DEALLOCATE 

FROM REGION #1. 



# 

B4B8 A2 56 

LDX 

#MSP-DTAB 

i 

MSP » MEMA 


B4BA AO 52 

LDY 

#MEMA--DTAB 




B4BC 20 CF B3 

JSR 

DMOVI 




B4BF AO 54 

LDY 

#MEMB-DTAE 

9 

... + MEMB 

% 

B4C 1 20 80 B5 

JSR 

DADD I 




B4C4 A2 5A 

LDX 

#MBC-DTAB 

9 

MBC = S1H 


B4C6 AO 30 

LDY 

#S1H-DTAB 



# 

B4C8 20 CF B3 

JSR 

DMOVI 




B4CB AO 56 

LDY 

#MSP-DTAB 

9 

... - MSP. 

• 

B4CD 20 90 B5 

JSR 

DSUBI 




B4D0 A2 30 

LDX 

#S1H-DTAB 

# 

S1H = S1H 

• 

B4D2 AO 54 

LDY 

#MEMB-DTAB 




B4D4 20 90 B5 

JSR 

DSUBI 

— „ r ^. r „ 

_ - - - - - r -- i 

# 

B4D7 A2 58 

LDX 

#MDP-DTAB 

) 

MDP = MEMA 


B4D9 AO 52 

LDY 

#MEMA-DTAB 




B4DB 20 CF B3 

JSR 

DMOVI 



• 







B4DE 4C OC B5 

JMP 

MOV I A 

# 

MOVE DATA 




MEMB. 








DEALLOCATE MEMORY IN REGION #2 


B4E1 

A2 

56 

MDA100 LDX 

#MSP-DTAB 

B4E3 

AO 

32 

LDY 

#S2L-DTAB 

B4E5 

20 

CF B3 

JSR 

DMOVI 


MSP = S2L. 




PILOT 


H. B. STEWART 


B4E8 AS 5A 

LDX 

#MBC-DTAB 

i 

B4EA AO 52 

LDY 

#MEMA-DTAB 

B4EC SO CF B3 

JSR 

DMOVI 


B4EF AO 32 

LDY 

#S2L-DTAB 

i 

B4F 1 20 90 B5 

JSR 

DSUBI 

B4F4 AS 32 

LDX 

#S2L-DTAB 

i 

B4F6 AO 54 

LDY 

#MEMB--DTAB 

B4F8 20 80 B 5 

JSR 

DADD I 


B4FB A2 58 

LDX 

#MDP-DTAB 

i 

B4FD AO 32 

LDY 

#S2L.-DTAB 


B4FF 20 CF B 3 

JSR 

DMOVI 


B502 A2 52 

LDX 

#MEMA-DTAB 

i 

B504 AO 54 

LDY 

#MEMB"DT AB 


B506 20 80 B 5 

JSR 

DADDI 


B509 4C 30 B5 

JMP 

MOVDA 

i 


f 


MBC * MEMA . . . 

. . . - SSL. 

SSL * SSL + MEMO. 

MDP - SSL (NEW VALUE). 

MEMA a MEMA + MEMB. 


MOVE DATA UPWARD & RETURN. 


PILOT 


H. B. STEWART 


; MOVE UTILITIES FOR MEMORY MANAGEMENT 

' MOVE BLOCKS OF- DATA WITH EITHER INCREASING OR DECREASING ADDRESS 
; THREE VARIABLES CONTROL THE MOVE ROUTINES: 

i 'MSP ' CONTAINS POINTER TO SOURCE DATA LOCATION 

i MDP' CONTAINS POINTER TO DESTINATION DATA LOCATION 

; 'MBC' CONTAINS THE NUMBER OF BYTES TO MOVE 


MOV I A — MOVE DATA BLOCK WITH INCREASING ADDRESS 
CALLING SEQUENCE: 

'MSP', 'MDP' & 'MBC ' SETUP 


JSR MOVIA 


B5QC 

A5 

DA 

MOVIA 

LDA 

MBC 


SEE IF BYTE COUNT = ZERO. 

B50E 

AA 



TAX 


i 

SAVE LSB OF BYTE COUNT. 

B50F 

05 

DB 


ORA 

MBC + 1 



B511 

FO 

1C 


BEQ 

MVI090 

9 

ZERO — NOTHING TO DO. 

B513 

AO 

00 


LDY 

#0 

9 

INDEX TO DATA BLOCK. 

B515 

B 1 

D6 

MV 1010 

LDA 

(MSP), Y 

9 

MOVE DATA. 

B517 

91 

D8 


STA 

(MDP), Y 



B51 9 

CS 



I NY 


9 

BUMP INDEX. 

B51 A 

DO 

04 


BNE 

MV I 020 

9 

NO PAGE WRAP. 

B51C 

E6 

D7 


INC 

MSP + 1 

9 

PAGE WRAP — BUMP POINTER VARIABLES 

B51E 

E6 

D9 


INC 

MDP+i 



B520 

CA 


MV I 020 

DEX 


9 

DONE? 

B521 

DO 

04 


BNE 

MVI030 

9 

NO. 

B523 

A5 

DB 


LDA 

MBC + 1 

9 

NOT SURE — CHECK FURTHER. 

B525 

FO 

08 


BEQ 

MVI090 

9 

YES — DONE. 

B527 

EO 

FF 

MV I 030 

CPX 

#SFF 

9 

MAINTAIN D. P. BYTE COUNT. 

B529 

DO 

EA 


BNE 

MV 101 0 



B52B 

C6 

DE 


DEC 

MBC+1 

9 

BORROW FROM MSB. 

B52D 

BO 

E6 


BCS 

MV 10 10 

9 

(BRA). 

B52F 

60 


MV I 090 

RTS 







/ 

; MOVDA 

— MOVE 

DATA BLOCK 

WITH DECREASING ADDRESS 


; CALLING SEQUENCE: 

i 

i 'MSP', 'MDP', & 'MBC' SETUP 

; JSR MOVDA 


r 1 LUT 


H. B. STEWART 


# 

# 

# 

# 

# 

# 


j 


B530 A5 DA 

MOVDA 

LDA 

MBC 

B 532 AA 


TAX 


B533 A8 


TAY 


B534 05 DB 


ORA 

MBC+1 

B536 FO 24 


BEQ 

MVD090 

B538 18 


CLC 


B539 A5 D7 


LDA 

MSP+1 

B53B 65 DB 


ADC 

MBC+1 

B53D 85 D7 


STA 

MSP + 1 

B53F 18 


CLC 


B540 A5 D9 


LDA 

MDP + 1 

B542 65 DB 


ADC 

MBC + 1 

B544 85 D9 


STA 

MDP+1 

B546 88 

MVD010 

DEY 


B547 CO FF 


CP Y 

#$FF 

B549 DO 06 


BNE 

MVD020 

B54B C6 DB 


DEC 

MBC + 1 

B54D C6 D7 


DEC 

MSP+1 

B54F C6 D9 


DEC 

MDP+1 

B551 B 1 D6 

MVD020 

LDA 

(MSP ) , Y 

B553 91 D8 


STA 

( MDP ) > Y 

B555 CA 


DEX 


B556 DO EE 


BNE 

MVD010 

B558 A5 DB 


LDA 

MBC + 1 

B55A DO EA 


BNE 

MVD010 

B55C 60 

MVD090 

RTS 



SETUP BYTE COUNT 


. . AND DATA INDEX. 

TEST FOR ZERO BYTE COUNT. 
ZERO — NOTHING TO DO. 

ADJUST POINTERS FOR START. 


DECREMENT INDEX. 

WRAP? 

NO. 

YES — DECREMENT ALL POINTERS (MSB). 


MOVE A DATA BYTE. 

DONE? 

NO — CONTINUE. 

NOT SURE — CHECK FURTHER. 
NO — CONTINUE. 

YES — RETURN. 


PILOT 


H. B. STEWART 


DOUBLE PRECISION ROUTINES 

ALL. VARIABLES ARE ACCESSED VIA THEIR OFFSET FROM SYMBOL 'DTAB'. 
NORMALLY THE X AND/OR Y REGISTERS CONTAIN THE 'DTAB ' OFFSET 
VALUES TO THE VARIABLE ( S ) TO BE DEALT WITH. 


DCWCI — DOUBLE BYTE UNSIGNED COMPARE WITH CONSTANT. 
CALLING SEQUENCE: 

X = DTAB OFFSET TO VARIABLE. 

Y = MSB OF CONSTANT. 

A = LSB OF CONSTANT. 






JSR 

DCWCI 

; UNSIGNED COMPARE. 





CC = 

DTAB ( X ) : Y, A 


B55D 

85 

A7 

DCWCI 

STA 

TEMP2 

; SAVE LSB. 

B55F 

84 

A8 


STY 

TEMP2+1 

; SAVE MSB. 

B561 

AO 

27 


LDY 

#TEMP2-DTAB 





; *S* 

JMP 

DCMPI 

; COMPARE & RETURN. 


DCMPI — DOUBLE BYTE UNSIGNED COMPARE INDEXED 

CALLING SEQUENCE: 

X = DATA #1 OFFSET 
Y = DATA #2 OFFSET 








JSR 

DCMPI 









BEQ 

DTAB ( X ) = 

DTAB(Y) 








BCS 

DTAB ( X ) >= 

= DTAB(Y) 








BCC 

DTAB ( X ) < 

DTAB(Y) 








CC = 

DTAB ( X ) : DTAB(Y) (UNSIGNED) 

B563 

B5 

81 


I 

)CMP I 

LDA 

DTAB+1, X 

# 

COMPARE MSBS. 

B565 

D9 

81 

00 



CMP 

DTAB+1, Y 



B568 

DO 

05 




BNE 

DCM090 

9 

NOT EQUAL — ALL 

B56A 

B5 

80 


DCM010 

LDA 

DTAB, X 

9 

EQUAL — COMPARE 

B56C 

D9 

80 

00 



CMP 

DTAB, Y 



B56F 

60 



DCM090 

RTS 









. — — - 


DSCMI - 




DOUBLE BYTE SIGNED COMPARE INDEXED 


PILOT 


H B STEWART 


i CALLING SEQUENCE 


X - DATA #1 OFFSET 
Y - DATA #2 OFFSET 





i 

JSR 

DSCMI 






i 

BEQ 

DTAB(X) - 

DTAB < Y ) 





i 

BCS 

DTAB(X) >« 

DTAB ( Y > 





i 

4 

DSCMI 

BCC 

DTAB(X) < 

DTAB(Y) 


B570 

B9 

81 00 

LDA 

DTAB + 1, Y 

i 

COMPARE MSBS FIRST. 

B573 

49 

80 


EOR 

#$80 


B575 

85 

A 1 


STA 

TEMP 



B577 

B5 

81 


LDA 

DTAB+1, X 



B579 

49 

80 


EOR 

#$80 



B57B 

C 5 

A 1 


CMP 

TEMP 



B57D 

FO 

EB 


BEQ 

DC MO 10 

i 

EQUAL — COMPARE LSBS 

B57F 

60 



RTS 


J 

NOT EQUAL — ALL DONE 


DMOVI — DOUBLE BYTE MOVE INDEXED 

CALLING SEQUENCE: 

X = DESTINATION OFFSET 
Y = SOURCE OFFSET 

JSR DMOVI 

i DTAB(X) = DTAB(Y) 

i 

i *** SEE ' PMOVE ' FOR THE 'DMOVI' CODE *■*•* 


DADDI — DOUBLE PRECISION ADD 

CALLING SEQUENCE: 

X ~ OFFSET TO 
Y = OFFSET TO 






i 

JSR 

DADDI 





i 

BVS 

OVERFLOW 





i 

i 

DTAB ( X ) 

= DTAB ( X 

B580 

18 



9 

DADDI 

CLC 


B581 

B5 

80 


DADDI X 

LDA 

DTAB/ X 

B583 

79 

80 

00 


ADC 

DTAB, Y 

B586 

95 

80 



STA 

DTAB/ X 

B588 

B5 

81 



LDA 

DTAB+1 / X 

B58A 

79 

81 

00 


ADC 

DTAB+1, Y 

B58D 

95 

81 



STA 

DTAB+1, X 


PILOT 


H. B. STEWART 


w w r 1 r r w * w V 

B58D 95 81 


HUL 

STA 


U I ftB+l , Y 

DTAB+1, X 


PILOT — H. B. STEWART 


B58F 60 


RTS 


DSUBI — DOUBLE PRECISION SUBTRACT 

CALLING SEQUENCE: 

X = OFFSET 
Y = OFFSET 








JSR 

DSUBI 







BVS 

OVERFLOW 







BEQ 

RESULT = 







DTAB(X) 

= DTAB ( X 

B590 

38 



I 

DSUBI 

SEC 


B591 

B5 

80 


DSUBIX 

LDA 

DTAB, X 

B593 

F9 

80 

00 



SBC 

DTAB, Y 

B596 

95 

80 




STA 

DTAB, X 

B598 

B5 

81 




LDA 

DTAB+1, X 

B59A 

F9 

81 

00 



SBC 

DTAB+1, Y 

B59D 

95 

81 




STA 

DTAB+1, X 

B59F 

15 

80 




ORA 

DTAB, X 

B5A1 

60 





RTS 



- DTAB(Y) 


; SET CC FOR ZERO TEST. 


DMULI — DOUBLE PRECISION MULTIPLY 

CALLING SEQUENCE: 

X = OFFSET 
X = OFFSET 





# 

JSR 

DMULI 




$ 

9 

DTAB ( X ) 

= DTAB ( X 

B5A2 

A9 

10 

9 

DMULI 

LDA 

#16 

B5A4 

85 

A3 


STA 

TEMP+2 

B5A6 

A9 

00 


LDA 

#0 

B5A8 

85 

A1 


STA 

TEMP 

B5AA 

85 

A2 


STA 

TEMP+1 

B5AC 

16 

80 

DMU010 

ASL 

DTAB, X 

B5AE 

36 

81 


ROL 

DTAB+1, X 

B5B0 

90 

OF 


BCC 

DMU020 

B5B2 

18 



CLC 


B5B3 

A5 

A1 


LDA 

TEMP 

B5B5 

79 

80 00 


ADC 

DTAB, Y 


SETUP LOOP COUNTER. 


INITIALIZE TEMP ACCUMULATOR. 


; DOUBLE PRECISION SHIFT LEFT. 
; NO BIT PRESENT. 

; BIT SET — ADD TO PARTIAL. 
















PILOT 


H. B STEWART 


B3B8 83 A 1 
B3BA A3 A2 
B3BC 79 81 00 
B3BF 83 A2 

B3C1 C6 A3 
B3C3 FO 07 

BSC 3 06 A 1 
B3C7 26 A2 
BSC 9 4C AC B5 

B3CC A5 A 1 
B5CE 95 80 
B5D0 A5 A2 
B5D2 95 81 
B5D4 60 


B5D5 B9 80 00 
B5D8 19 81 00 
B5DB DO 05 

B5DD A9 84 
B5DF 4C 6C A1 

B5E2 A9 11 
B5E4 85 A3 
B5E6 86 A4 

B5E8 A9 00 
B5EA 85 A1 
B5EC 85 A2 

B5EE B9 81 00 
B5F1 85 A6 
B5F3 10 06 

B5F5 20 3F B6 
B5F8 20 2B B6 

B5FB B5 81 
B5FD 85 A5 
B5FF 10 03 

B601 20 3F B6 



sta\ 

\ TEMP 




LDA 

^ TEMP-*- 1 




ADC 

DTAB+1, Y 




STA 

TEMP+1 



DMU020 

DEC 

TEMP -*-2 

i DONE? 



BEQ 

DMU090 

i YES — RESULT 

IS IN 'TEMP 


ASL 

TEMP 

i NO — DOUBLE 

PRECISION SHIFT LEFT 


ROL 

TEMP+1 



JMP 

DMU010 



DMU090 

LDA 

TEMP 

i DONE — MOVE 

RESULT. 


STA 

DTAB, X 




LDA 

TEMP+1 




STA 

DTAB+1 , X 




RTS 





; DDIVI — DOUBLE PRECISION DIVIDE 

i 

; CALLING SEQUENCE: 

i 

i X = OFFSET TO DIVIDEND 

; Y = OFFSET TO DIVISOR 


I 

JSR 

DDIVI 



i 

} 

DTAB ( X ) 

= DTAB ( X ) / 

DTAB(Y) (SIGNED) 

9 

' TEMP ' 

= REMAINDER 

(SIGN 

MAY BE WRONG ! ! ! ) 

9 

DDIVI 

LDA 

DTAB# Y 

j 

CHECK FOR DIVIDE BY ZERO. 


ORA 

DTAB+1, Y 




BNE 

DDI003 

9 

2 

O 

1 

i 

O 


LDA 

#DI VERR 

9 

ERROR. 


JMP 

PSTOP 



DDI003 

LDA 

#16+1 

9 

SETUP LOOP COUNTER. 


STA 

TEMP+2 




STX 

TEMP+3 

9 

SAVE INDEX TO DIVIDEND. 


LDA 

#0 

9 

INITIALIZE REMAINDER. 


STA 

TEMP 




STA 

TEMP+1 




LDA 

DTAB+1, Y 

9 

SEE IF DIVISOR IS NEGATIVE. 


STA 

TEMP+5 




BPL 

DD I 006 

9 

MO. 


JSR 

DNEGI 

9 

YES — NEGATE DIVIDEND . . . 


JSR 

DDI093 

9 

... & DIVISOR (*** CRAZY CALL ***). 

DDI006 

LDA 

DTAB+1, X 

* 

SEE IF DIVIDEND IS NEGATIVE. 


STA 

TEMP +4 




BPL 

DDI008 

9 

d 

z 


JSR 

DNEGI 

9 

YES — NEGATE IT NOW (& THEN AGAIN LATE 




PILOT 


H. B. STEWART 


i NO. 


B6FF lO 03 


B601 20 3F B6 


PILOT — H. B. STEWART 


BPL DD 1008 

JSR DNEGI 


i YES — NEGATE IT NOW (& THEN AGAIN LATER). 




/ 


/ 


0 


0 


0 


B604 

18 



DDI008 

CLC 



B605 

A6 

A4 


DDI010 

LDX 

TEMP+3 

; GET INDEX TO DIVIDEND. 

B607 

36 

80 



ROL 

DTAB, X 

; DOUBLE PRECISION ROTATE. 

B609 

36 

81 



ROL 

DTAB+1 / X 

B60B 

C6 

A3 



DEC 

TEMP+2 

; DONE? 

B60D 

FO 

11 



BEQ 

DDI090 

i YES. 

B60F 

26 

A1 



ROL 

TEMP 

i NO. 

B611 

26 

A2 



ROL 

TEMP+1 


B613 

A2 

21 



LDX 

#TEMP-DTAB 

; IS REMAINDER < DIVISOR? 

B615 

20 

63 

B5 


JSR 

DCMPI 


B618 

90 

EB 



BCC 

DDI010 

; YES. 

B61 A 

20 

90 

B5 


JSR 

DSUBI 

; NO. 

B61D 

38 




SEC 



B61E 

BO 

E5 



BCS 

DDI010 

; (BRA). 

B620 

A5 

A5 


DDI090 

LDA 

TEMP+4 

; SEE IF RESULT IS TO BE NEGATED. 

B622 

10 

03 



BPL 

DDI092 

# NO. 

B624 

20 

3F 

B6 


JSR 

DNEGI 

» YES — NEGATE POSITIVE RESULT. 

B627 

A5 

A6 


DDI092 

LDA 

TEMP+5 

i WAS DIVISOR NEGATED EARLIER. 

B629 

10 

07 



BPL 

DDI095 

; NO. 

B62B 

98 



DD I 093 

TYA 


; YES — NEGATE IT BACK TO ORIGINAL SIGN. 

B62C 

AA 




TAX 



B62D 

20 

3F 

B6 


JSR 

DNEGI 


B630 

A6 

A4 



LDX 

TEMP+3 

; RESTORE INDEX. 

B632 

60 



DDI095 

RTS 




DMODI — MODULO OF SORTS 
CALLING SEQUENCE: 


X = OFFSET TO DIVIDEND 
Y = OFFSET OT DIVISOR 





i 

JSR 

DMODI 





/ 

# 

DTAB ( X ) 

= DTAB ( X ) 

MOD DTAB(Y) 

B633 

20 

D5 B5 

# 

DMODI 

JSR 

DDIVI 

; FIRST DO DIVISION. 

B636 

A5 

A1 


LDA 

TEMP 

; TAKE ADVANTAGE OF SIDE EFFECT 

B638 

95 

SO 


STA 

DTAB, X 


B63A 

A5 

A2 


LDA 

TEMP+1 


B63C 

95 

81 


STA 

DTAB + 1, X 


B63E 

60 



RTS 





; DNEGI 


--/DOUBLE PRECISION NEGATE 







H B STEWART 


+ PILOT — 


i 

i 


CALLING 

X 



NCE : 


* OFFSET TO NUMBER 


JSR DNEGI 


i 





9 

< 

DNEGI 

DTAB ( X ) 

B63F 

38 


SEC 

B640 

A9 

00 


LDA 

B642 

F5 

80 


SBC 

B644 

95 

80 


STA 


= -DTAB(X) 

i (CLEAR BORROW). 

#0 

DT AB, X 
DTAB, X 


B646 A9 00 
B648 F5 81 
B64A 95 81 
B64C 60 


LDA #0 

SBC DT AB + 1 * X 

STA DTAB+1, X 

RTS 


; DADDS — ADD A REGISTER TO DOUBLE BYTE 
$ 

; CALLING SEQUENCE: 

/ 

; A - SIGNED BINARY NUMBER (-128 TO 127) 

; X ■ DTAB OFFSET TO DP NUMBER 

9 

i JSR DADDS 

f 

DTAB ( X ) = DTAB ( X ) + A 


B64D 

C9 

00 

DADDS 

CMP 

#0 

; SEE IF POSITIVE OR NEGATIVE 

B64F 

30 

OA 


BMI 

DDA030 

i NEGATIVE. 





i **-■«- 

EXTERNAL 

ENTRY POINT *** 



B651 

18 


DADDP 

CLC 


t 

POSITIVE — ADD. 

B652 

75 

80 


ADC 

DTAB, X 



B654 

95 

80 


STA 

DTAB, X 



B656 

90 

02 


BCC 

DDA010 

* 

NO CARRY. 

B658 

F6 

81 


INC 

DTAB+1, X 

i 

CARRY — ADD TO MSB. 

B65A 

60 


DDA010 

RTS 



- nUDCR-T 

B65B 

18 




DDA030 

CLC 



L: 

B65C 

75 

80 


ADC 

DTAB, X 



B65E 

95 

80 


STA 

DTAB, X 



B660 

BO 

02 


BCS 

DDA040 

# 

NO BORROW. 

B662 

D6 

81 


DEC 

DTAB+1, X 

9 

BORROW — SUB FROM MSB. 


B664 60 DDA040 RTS 





; RELATIONAL TESTS 



PILOT 


H. B. STEWART 


i RELATIONAL TESTS 




PILOT — H. B. STEWART 


CALLING SEQUENCE: 


X = DATA #1 OFFSET 
Y = DATA #2 OFFSET 


JSR 


DXXTI 


DTAB(X) = 1 IF RELATION 


B665 

20 

63 

B5 

DEQTI 

JSR 

DCMPI 

B668 

FO 

27 



BEQ 

DTRUE 

B66A 

DO 

29 



BNE 

DFALSE 

B66C 

20 

63 

B5 

DNETI 

JSR 

DCMPI 

B66F 

DO 

20 



BNE 

DTRUE 

B67 1 

FO 

22 



BEQ 

DFALSE 

B673 

20 

70 

B5 

DGTTI 

JSR 

DSCMI 

B676 

FO 

ID 



BEQ 

DFALSE 

B678 

90 

IB 



BCC 

DFALSE 

B67A 

BO 

15 



BCS 

DTRUE 

B67C 

20 

70 

B5 

DLTTI 

JSR 

DSCMI 

B67F 

90 

10 



BCC 

DTRUE 

B681 

BO 

12 



BCS 

DFALSE 

B683 

20 

70 

B5 

DGETI 

JSR 

DSCMI 

B6S6 

BO 

09 



BCS 

DTRUE 

B688 

90 

OB 



BCC 

DFALSE 

B68A 

20 

70 

B5 

DLETI 

JSR 

DSCMI 

B68D 

FO 

02 



BEQ 

DTRUE 

B68F 

BO 

04 



BCS 

DFALSE 





> *S* 

BCC 

DTRUE 

B691 

A9 

01 


DTRUE 

LDA 

#1 

B693 

DO 

02 



BNE 

DFA010 

B695 

A9 

00 


DFALSE 

LDA 

#0 

B697 

95 

80 


DFA010 

STA 

DTAB# X 

B699 

A9 

00 



LDA 

#0 

B69B 

95 

81 



STA 

DTAB + 1# X 

E69D 

60 




RTS 



ONE OF SIX ROUTINES 


TRUE# O IF FALSE 

; UNSIGNED COMPARE (FASTER THAN SIGNED). 

; EQUAL RESULTS IN TRUE. 

; UNEQUAL RESULTS IN FALSE. 

i UNSIGNED COMPARE (FASTER THAN SIGNED). 

; UNEQUAL RESULTS IN TRUE. 

; EQUAL RESULTS IN FALSE. 

# SIGNED COMPARE. 

; EQUAL RESULTS IN FALSE. 

# LESS THAN RESULTS IN FALSE. 

; GREATER THAN RESULTS IN TRUE. 

; SIGNED COMPARE. 
i LESS THAN RESULTS IN TRUE. 

; GREATER THAN OR EQUAL RESULTS IN FALSE. 

i SIGNED COMPARE. 

; GREATER THAN OR EQUAL RESULTS IN TRUE, 
i LESS THAN RESULTS IN FALSE. 

i SIGNED COMPARE. 

; EQUAL RESULTS IN TRUE.s 
; GREATER THAN RESULTS IN FALSE, 
i LESS THAN RESULTS IN TRUE. 


“biUe- i 




; "TRUE" . . . 

; ... TO VARIABLE. 

i "FALSE" . . . 


i 


. . . TO VARIABLE. 


PILOT 


H B STEWART 


/ 




ILOT 


B69E A2 62 
B6A0 4C CF B3 


B6A3 AO 62 
B6A5 4C CF B3 


ACCUMULATOR FUNCTIONS — ASSUME THE EXISTENCE OF A DOUBLE PRECISION 
VARIABLE WITHIN 'DTAB ' NAMED 'ACC'. 


DLOADA — LOAD 'ACC' WITH DATA 

CALLING SEQUENCE: 

Y = OFFSET TO SOURCE DATA 

JSR DLOADA 

X = ACC OFFSET 
'ACC ' = DTAB ( Y) 


DLOADA LI 

Cj mp 



#ACC-DTAB 

DMOVrj> 


DSTORA — STORE 'ACC' TO LOCATION 

CALLING SEQUENCE: 

X = OFFSET TO DESTINATION 

JSR DSTORA 

Y = 'ACC' OFFSET 
DTAB ( X ) = 'ACC' 


DSTORA 


LDY 

JMP 


#ACC— DTAB 
DMOVT 


1 


l/V <sve 


/ 


to e\ l 3"^ ^ S 


/ 


B6A8 A2 62 
B6AA 4C 80 B5 


— H. B. STEWART 


DADDA — ADD DATA TO 'ACC' 
CALLING SEQUENCE: 


DADDA L 


'ACC' - 'ACC' + DTAB(Y) 
#ACC-DTAB 



Y = OFFSET TO DATA 




JSR DADDA 




X = 'ACC' OFFSET 



— ~ 








. IF DEBUG 

DSUBA — SUBTRACT DATA FROM 'ACC' 
CALLING SEQUENCE: 

Y = OFFSET TO DATA 

_ i ■ U l 



















ICO 


nci in a 


ILOT — H. B STEWART 


JSR DSUBA 

BEQ RESULT = 0 

X = 'ACC' OFFSET 
'ACC' = 'ACC' - DTAB(Y) 


DSUBA LDX #ACC-DTAB 

JMP DSUBI 

. END IF 


DCMPA — COMPARE 'ACC' WITH DATA (UNSIGNED) 
CALLING SEQUENCE: 

Y = DATA OFFSET 


JSR DCMPA 


CC = 'ACC' : DTAB(Y) (UNSIGNED) 
X = 'ACC' OFFSET 


B6AD A2 62 DCMPA LDX #ACC-DTAB 

B6AF 4C 63 B5 JMP DCMPI 












PILOT 


H. B 


STEWART 


l 

i ASCDEC — DECIMAL IN ASCII TO BINARY CONVERSION 

i 

> CALLING SEQUENCE: 

S 

' X » DTAB OFFSET TO POINTER VARIABLE 

i Y ■ OFFSET WITHIN STRING TO START OF NUMBER 

i 

I JSR ASCDEC 

i 

i * NUMBER ' = RESULT OF CONVERSION (MODULO 2**16) 



i Y * 

INDEX TO END OF NUMBER 

DELIMITER 


i USES 

i 

ASCDEC LDA 
STA 

'TEMP' THRU 'TEMP 

'+4 


B6B2 A9 00 
B6B4 85 B8 

#0 

NUMBER 

# 

INITIALIZE RESULT. 

B6B6 85 B9 

STA 

NUMBER+1 



B6B8 B5 80 

LDA 

DTAB, X 

i 

MOVE POINTER. 

B6BA 85 A3 

STA 

TEMP+2 



B6BC B5 81 

LDA 

DTAB+1 » X 



B6BE 85 A4 

STA 

TEMP+3 



B6C0 B5 83 

LDA 

DTAB+3, X 

i 

SAVE END INDEX. 

B6C2 85 A5 

STA 

TEMP+4 



B6C4 B 1 A3 

LDA 

(TEMP+2) , Y 



B6C6 C9 2D 

CMP 

# '- 

i 

UNARY MINUS? 

B6C8 DO 09 

BNE 

ASC010 

j 

NO. 

B6CA C8 

INY 


i 

YES — SKIP OVER IT. 

B6CB 20 D3 B6 

JSR 

ASC010 

# 

*** RECURSIVE CALL ***. 

B6CE A2 38 

LDX 

#NUMBER-DTAB 



B6D0 4C 3 F B6 

JMP 

DNEGI 

i 

NEGATE RESULT & RETURN. 

B6D3 C4 A5 

ASC010 CPY 

TEMP+4 

/ 

END OF STRING? 

B6D5 FO 33 

BEQ 

ASC090 

i 

YES. 

B6D7 B 1 A3 

LDA 

(TEMP+2) , Y 

J 

GET A CHARACTER. 

B6D9 20 7 A B7 

JSR 

CNUMBR 

# 

VALID DECIMAL DIGIT? 

B6DC BO 2C 

BCS 

ASC090 

» 

NO — DONE. 

B6DE CS 

INY 




B6DF 48 

PHA 

> 

YES — SAVE IT. 

B6E0 06 B8 

ASL 

NUMBER 

i 

X2. 

B6E2 26 B9 

ROL 

NUMBER+1 



B6E4 A5 B9 

LDA 

NUMBER+1 

i 

SAVE X2. 

B6E6 85 A2 

STA 

TEMP+1 



B6E8 A5 B8 

LDA 

NUMBER 



B6EA 85 A1 

STA 

TEMP 




B6EC OA 
B6ED 26 B9 

B6EF OA 
B6F0 26 B9 

B6F2 18 
B6F3 65 A1 
B6F5 85 B8 



ASL 

ROL 

ASL 

ROL 

CLC 

ADC 

STA 


A ; X4. 

NUMBER+1 



NUMBER 


PILOT 


H. B. STEWART 


B6F5 85 B8 


STA 


NUMBER 


PILOT — H B. STEWART 


B6F7 90 03 

B6F9 E6 B9 
B6FB 18 


B6FC 68 
B6FD 65 B8 
B6FF 85 B8 
B701 A5 B9 
B703 65 A2 
B705 85 B9 
B707 4C D3 B6 

B70A 60 


B70B 84 A6 
B70D B 5 80 
B70F 85 A 7 
B71 1 B5 81 
B713 85 A8 
B715 10 OA 

B71 7 A2 27 
B719 20 3F B6 
B71C A9 2D 
B71E 20 6F AF 

B721 AO 00 
B723 84 A9 

B725 B9 70 B7 
B728 85 A3 
B72A B9 71 B7 
B72D 85 A4 
B72F 84 A5 

B731 A9 30 
B733 8D 51 05 

B736 A2 27 
B73 8 AO 23 

B73A 20 90 B5 
B73D A5 A8 
B73F 30 05 


BCC 

INC 

CLC 


ASC020 

NUMBER+1 


i NO CARRY. 

i CARRY — ADD TO MSB. 


ASC020 


PLA 

ADC 

STA 

LDA 

ADC 

STA 

JMP 


NUMBER 

NUMBER 

NUMBER+1 

TEMP+1 

NUMBER+1 

ASC010 


i GET NEW DIGIT. 
i ADD TO PARTIAL RESULT 



DECASC — BINARY TO DECIMAL IN ASCII CONVERSION 
CALLING SEQUENCE: 

X = DTAB INDEX TO SIGNED VALUE 
JSR DECASC 

PRINTS RESULT TO 'CHOT' ROUTINE 

USES ' TEMP ' +2 THRU 'TEMP '+5 'TEMP2' THRU / TEMP2 / +2 


DECASC 


DEC020 

DEC030 


DEC040 


STY 

LDA 

STA 

LDA 

STA 

BPL 

LDX 

JSR 

LDA 

JSR 

LDY 

STY 

LDA 

STA 

LDA 

STA 

STY 

LDA 

STA 

LDX 

LDY 

JSR 

LDA 

BMI 


TEMP+5 
DTAB, X 
TEMP2 
DTAB+1 , X 
TEMP2+1 
DEC020 

#TEMP2— DTAB 
DNEGI 


CHOT 

#0 

TEMP2+2 

PTEN, Y 
TEMP+2 
PTEN+1, Y 
TEMP+3 
TEMP+4 

# '0 
DIGIT 


#TEMP2-DTAB 

#TEMP+2-DTAB 

DSUBI 

TEMP2+1 

DEC045 


SAVE Y REGISTER. 

MOVE DATA TO TEMPORARY STORAGE. 


NUMBER IS POSITIVE. 

NEGATE NUMBER. 

PRINT LEADING MINUS SIGN. 

PRINT A CHARACTER. 

INITIALIZE CONVERSION INDEX . . . 

& LEADING ZERO SUPPRESS FLAG. 

GET POWER OF TEN. 

SAVE INDEX TO TABLE. 

INITIALIZE DIGIT. 

PREPARE FOR SUCCESSIVE SUBTRACTION. 


SEE IF RESULT IS NEGATIVE. 
YES — ENOUGH ALREADY. 


smell Form* 


PILOT 


H B STEWART 


B741 EE 51 05 
B744 DO F4 


B746 20 80 B5 


B749 A5 A9 
B74B DO 09 


B74D AD 51 05 
B750 C9 30 
B752 FO 08 


B754 85 A9 


B756 AD 51 05 
B759 20 6F AF 


B75C A4 A5 
B75E C8 
B75F C8 
B760 CO OA 
B762 DO Cl 


B764 A5 A9 
B766 DO 05 


B768 A9 30 
B76A 20 6F AF 


B76D A4 A6 
B76F 60 


B770 10 27 E8 
B773 03 64 00 
B776 OA 00 01 
B779 00 
OOOA 



INC 

DIGIT 


BNE 

DEC040 

DEC045 

JSR 

DADDI 


LDA 

TEMP2+2 


BNE 

DEC050 


LDA 

DIGIT 


CMP 

# '0 


BEQ 

DEC060 


STA 

TEMP2+2 

DEC050 

LDA 

DIGIT 


JSR 

CHOT 

DEC060 

LDY 

TEMP+4 


I NY 



I NY 



CPY 

#PTENL 


BNE 

DEC030 


LDA 

TEMP2+2 


BNE 

DEC070 


LDA 

#'0 

* 

JSR 

CHOT 

DEC070 

LDY 

TEMP+5 


RTS 


PTEN 

. WORD 

10000, 1000, IOC 


* NO — KEEP SUBTRACTING. 
> (BRA). 


i NOW CORRECT FROM ONE TOO MANY SUBTRACTS. 


i SEE IF NON-ZERO DIGIT HAS BEEN PRINTED YET 
1 YES — PRINT ALL SUBSEQUENT DIGITS. 


i NO — SEE IF THIS DIGIT IS ANOTHER ZERO. 
i YES IT IS — SUPPRESS IT. 
i NO — SET FLAG AND PRINT DIGIT. 

; PRINT DIGIT. 


; RESTORE TABLE INDEX. 


; DONE? 
; NO. 


; WAS THE NUMBER = 0? 
i NO. 


; YES — PRINT SINGLE ZERO DIGIT. 


; YES — RESTORE Y REGISTER . 
; ... & RETURN. 


i DECREASING POWERS OF TEN. 


PTENL=*-PTEN 


; TABLE LENGTH IN WORDS. 






































PILOT 


H. B. STEWART 



PILOT 


H B STEWART 


i 

i 

i 

i 


CNUMBR — CHECK ASCII CHARACTER FOR VALID NUMBER ( '0 
CALLING SEQUENCE: 


'9) 


4 

i 

i 

4 

i 

i 

i 


i 


B77A 

C9 

30 

CNUMBR 

B77C 

90 

04 


B77E 

C9 

3A 


8780 

90 

02 


B782 

38 


CNU010 

B783 

60 



B7B4 

E9 

2F 

CNU020 

B786 

18 



B787 

60 




A « ASCII CHARACTER 


JSR 

CNUMBR 


BCS 

NOT DECIMAL 

DIGIT 

A * 

BINARY DIGIT 


CMP 

# '0 

4 

BCC 

CNU010 

l 

CMP 

# '9*1 

4 

BCC 

CNU020 

4 

SEC 

RTS 


4 

SBC 

# '0-1 

4 

CLC 

RTS 


4 


< 'O? 

YES — INVALID. 

> '9? 

NO — VALID DECIMAL DIGIT 
SET CARRY FOR EXIT. 


(ADJUST FOR CARRY CLEAR) 
SET CC FOR EXIT 


4 

; CLETTR — CHECK ASCII CHARACTER FOR ALPHA LETTER < 'A 

i 

i CALLING SEQUENCE: 

i 

l A » ASCII CHARACTER 

< 

i JSR CLETTR 

i BCS NOT ALPHA LETTER 

) 

i A * ASCII CHARACTER 


B788 

B78A 

C9 

90 

41 

04 

CLETTR 

CMP 

BCC 

# 'A 

CLE010 

4 < 'A? 

4 YES — NOT ALPHA 

B78C 

B78E 

C9 

90 

5B 

01 


CMP 

BCC 

# 'Z«-l 
CLE020 

4 > 'Z? 

4 NO — VALID LETTER. 

B790 

38 


CLE010 

SEC 


4 SET CARRY FOR EXIT. 

B791 

60 


CLE020 

RTS 




'Z> 


B792 

B792 A5 AE 
B794 85 3A 


,• STMLST — SETUP LIST POINTER TO STATEMENT LIST 

I 

STMLST 
SETPGL LDA 
STA 


S1L 

LP 


I 'LP' 


'S1L ' . 


PILOT 


H B STEWART 


■796 AS AF 
B798 85 B8 

B79A 60 


81L«1 
LP ♦ 1 


B79B A5 B2 
B79D 85 BA 
B79F A5 B3 
B7A1 85 BB 
B7A3 60 


' 8ET8VL - SETUP LIST POINTER TO NAMED STRING LIST 

SETSVL l DA oni 

82L i •LP 1 - 'S2L ' . 


B7A4 20 88 B7 
B7A7 90 OC 

B7A9 48 
B7AA 20 7A B7 
B7AD 68 
B7AE 90 05 

B7B0 85 A 1 
B7B2 C 5 A1 
B7B4 60 

B7B5 C9 FF 
B7B7 60 


' CKE0A CHECK FOR END OF ATOM < NON-ALPHANUMER IC CHARACTER) 

i 

i CALLING SEQUENCE. 


CKEOA 


A ® ASCII CHARACTER 


JSR 

CBEQ^ 

CKEOA 


END OF ATOM 

(NOT AN ALPHANUMERIC 

JSR 

CLETTR 

i ALPHA LETTER? 

BCC 

CKE090 

; YES. 

PHA 



JSR 

CNUMBR 

i NO — NUMERIC i 

PLA 



BCC 

CKE090 

i YES. 

'STA 

CMP 

TEMP 

TEMP 

i NEITHER — SET 


RTS 


CKE090 CgMP 
RTS 


#*FF 


B7B8 C8 

B7B9 B 1 80 
B7BB 20 A4 B7 
B7BE DO F8 

B7C0 60 


SCEOA 


— SCAN 

TO END OF ATOM 


I NY 



LDA 

< INLN ) , Y 


JSR 

CKEOA 

; END OF 

BNE 

SCEOA— 1 

i NO. 

RTS 


; YES — 


YES — RETURN WITH CC SET. 


PILOT — H. B. STEWART 


SCNLBL — IDENTIFY (& SCAN TO END OF) LABEL 


CALLING SEQUENCE: 

Y = INDEX TO INPUT LINE. 


i SCNLBL 

i 


IDENTIFY <& SCAN TO END OF) LABEL 


PILOT — H. B. STEWART 


; CALLING SEQUENCE: 

Y = INDEX TO INPUT LINE. 

JSR SCNLBL 

BNE NO LABEL PRESENT (A = CODE). 

Y = INDEX TO END OF LABEL + 1 






i NOTE: 

JUMPS 

TO 'PSTOP' 

B7C 1 

20 

EE 

B7 

SCNLBL 

JSR 

SKPSEP 

B7C4 

C9 

2A 



CMP 


B7C6 

FO 

03 



BEQ 

SCL005 

B7C8 

A9 

02 



LDA 

#IMPERR 

B7CA 

60 




RTS 


B7CB 

C8 



SCL005 

INY 


B7CC 

B 1 

80 



LDA 

( I NLN ) / Y 

B7CE 

20 

A4 

B7 


JSR 

CKEOA 

B7D1 

DO 

E6 



BNE 

SCEOA 

B7D3 

A9 

02 



LDA 

#ATMERR 

B7D5 

4C 

6C 

A1 


JMP 

PSTOP 


IF INVALID LABEL NAME FOUND. 

i SKIP LEADING BLANKS AND/OR COMMAS. 
; LABEL PREFIX DELIMITER? 

; YES. 

; NO LABEL. 


} SEE IF AT LEAST ONE ALPHANUMERIC. 
i YES — SCAN TO END OF ATOM ?< RETURN. 

; NO — INVALID LABEL NAME. 


CHKSEP — CHECK FOR OPERAND SEPARATOR CHARACTER 

CALLING SEQUENCE: 

A = CHARACTER. 

JSR CHKSEP 

BNE NOT A SEPARATOR 


B7D8 C9 20 

CHKSEP CMP 

# ' 

; BLANK? 

B7DA FO OA 

BEQ 

CKS090 

; YES. 

B7DC C9 2C 

CMP 


; COMMA? 

B7DE FO 06 

BEQ 

CKS090 

; YES. 


; *S* JMP CHKTRM ; END OF STATEMENT CHECK & RETURN. 


; CHKTRM — CHECK FOR STATEMENT TERMINATOR (EOL OR 'I'). 


i CALLING SEQUENCE: 

i 

i A = CHARACTER. 

9 

} JSR CHKTRM 

? BNE NOT STATEMENT TERMINATOR. 


j 


PILOT — H. B. STEWART 


B7EO 

B7E2 

C9 

FO 

9B 

02 

CHKTRM 

CMP 

BEQ 

#EOL 

CKT090 

B7E4 

C9 

SB 


CMP 


B7E6 

B7E6 

60 


CKS090 

CKT090 

RTS 



B7E7 20 FA B7 
B7EA C9 3D 
B7EC 60 


CHKEQS — CHECK FOR EQUAL SIGN 
CALLING SEQUENCE: 

Y = ' INLN ' INDEX. 


JSR 

BEQ 


CHKEQS 

1ST NON-BLANK CHARACTER WAS '='. 


Y = ' INLN ' INDEX TO 1ST NON-BLANK CHAR. 


CHKEQS JSR 
CMP 
RTS 


i SKIP LEADING BLANKS. 
> RETURN WITH CC SET. 


SKPSEP — SKIP OPERAND SEPARATOR (S) 
CALLING SEQUENCE: 





9 

} 

i 

/ 

i 

i 

i NOTE: 

Y = 

INDEX TO INPUT LINE 







JSR 
Y = 
ANY 

SKPSEP 

INDEX TO FIRST NON-SEPARATOR 
STRING OF CONSECUTIVE BLANKS 

FOUND 

AND/OR 

COMMAS 




i 

SEPARATOR. 




B7ED 

ce 


i 

I NY 





B7EE 

B 1 

80 

SKPSEP 

LDA 

( INLN), Y 




B7F0 

C9 

20 


CMP 

#' ; 

BLANK? 



B7F2 

FO 

F9 


BEQ 

SKPSEP-l i 

YES. 



B7F 4 

C9 

2C 


CMP 

#'• i 

COMMA? 



B7F6 

FO 

F5 


BEQ 

SKPSEP-l ; 

YES. 



B7FQ 

60 


SKS090 

RTS 








9 

i SLB — 

SKIP 

LEADING BLANKS 





PILOT — H. B. STEWART 


$ 


CALLING SEQUENCE: 


# 


I 


PILOT — H. B. STEWART 




CALLING SEQUENCE: 

JSR SLB 

A = FIRST NON-BLANK CHARACTER FOUND. 


B7F9 

C8 


I NY 


B7FA 

B 1 

80 

SLB LDA 

< INLN), Y 

B7FC 

C9 

20 

CMP 

# ' i 

B7FE 

FO 

F9 

BEQ 

SLB— 1 i 

BSOO 

60 


RTS 





; SCNEOL — 

SCAN TO END OF LINE 

B801 

C8 


I NY 


B802 

B 1 

80 

SCNEOL LDA 

( INLN ) > Y 

B804 

C9 

9B 

CMP 

#EOL 

B806 

DO 

F9 

BNE 

SCNEOL-l 

B808 

60 


RTS 



BLANK? 

YES — KEEP SCANNING. 


; RETURN WITH CC SET. 


B809 

A2 

36 

B80B 

20 

CF 

B80E 

20 

54 

B811 

A2 

5C 

B813 

20 

OE 

B816 

A9 

20 

B818 

20 

6F 

B81B 

C8 


B81C 

B 1 

B6 

B81E 

AA 


B81F 

CE 

FE 

B822 

C8 


B823 

B 1 

B6 


PSF — PRINT A STORAGE FORMAT LINE 

CALLING SEQUENCE: 

Y = INDEX TO LINE POINTER. 


PSF 




JSR 


PSFOIO 


. IF 
JSR 

. END IF 
. IF 
LDA 
JSR 

. END IF 

I NY 
LDA 
TAX 

DEC 

I NY 
LDA 


PSF 

#POINT-DTAB 

DMOVI 

GTLNNO 

#L I NENO-DT AB 
DECASC 

DEBUG 

SPACE 

DEBUG-1 

CHOT 


i MOVE POINTER TO 'POINT ' . 
i GET LINE # TO 'LINENO'. 

; PRINT BINARY LINE #. 

; PUT SPACE BETWEEN LINE # AND STATMENT. 
i PUT SPACE BETWEEN LINE # AND STATEMENT. 

; GET STATEMENT LENGTH. 

; DISPLAY CONTROL CHARACTERS. 

; PRINT STATEMENT BODY. 


PILOT 


H B STEWART 


B829 

20 

6F 

AF 

JSR 

B928 

CA 



DEX 

B829 

DO 

F7 


BNE 

B92B 

EE 

FE 

02 

INC 

B82E 

60 



RTS 


CHOT 

PSFOIO 

DSPFLG i BACK TO ZERO. 


B82F AO 00 
B831 A9 20 
B833 91 88 
B835 84 8A 
B837 C8 
B838 84 8B 
B83A 60 


j 

i 

i 


NULACC 


SET THE ACCEPT BUFFER TO NULL (SINGLE SPACE) 


NULACC LDY 

#0 

LDA 

# ' 

STA 

(ACLN), Y 

STY 

ACLN+2 

I NY 


STY 

ACLN+3 

RTS 



» SINGLE SPACE, 
i START INDEX. 
i END INDEX. 


* 





; ZERVAR — 

B83B 

A2 

34 

t 

ZERVAR 

LDX 

B83D 

A9 

00 


LDA 

B83F 

9D 

1A 05 

ZNV010 

STA 

B842 

CA 



DEX 

B843 

DO 

FA 


BNE 


ZERO NUMERIC VARIABLES 

#52 ; 26 VARIABLES. 

#0 

VARTAB-1, X 
ZNV010 


B845 60 


RTS 


RETURN WITH CC AND A = 





; ABRTCK — 

BREAK KEY ABORT 

CHECK 


B846 

48 


ABRTCK 

PHA 

✓ 


(SEE ' XSYNC ' ). 

BS47 

A5 

11 


LDA 

BREAK 

i 

OPERATOR ABORT? 

B849 

DO 

07 


BNE 

ABC090 

i 

NO. 

B84B 

C6 

1 1 


DEC 

BREAK 

9 

YES — RESET FLAG. 

B84D 

A9 

87 


LDA 

#ABTERR 

i 

STOP WITH STATUS CODE. 

BS4F 

4C 

6C A1 


JMP 

PSTOP 



B852 

68 


ABC090 

PLA 




B853 

60 



RTS 





; GTLNNQ — GET LINE # FROM STORAGE LINE 

9 

; CALLING SEQUENCE: 

/ 

; 'POINT ' POINTS TO STORAGE LINE 

| 

i JSR GTLNNO 


PILOT 


H. B. STEWART 


POINT 


POINTS TO STORAGE LINE 


JSR GTLNNO 


PILOT — H. B. STEWART 


'LINENO 7 = BINARY LINE # 
Y = 4 


B854 

AO 

03 

GTLNNO LDY 

#3 


B856 

B 1 

B6 

LDA 

(POINT), Y 


B858 

85 

DD 

STA 

LINENO+1 

; RE-INVERT ORDER. 

B85A 

C8 


I NY 



B85B 

B 1 

B6 

LDA 

(POINT), Y 


B85D 

85 

DC 

STA 

LINENO 


B85F 

60 


RTS 






i NEWLIN — 

ISSUE NEW LINE 

SEQUENCE TO 'CHOT 7 

B860 

A9 

9B 

NEWLIN LDA 

#EOL 


B862 

4C 

6F AF 

JMP 

CHOT 

; NEWLINE & RETURN 


i SPACE ( S ) — ISSUE SPACE < S ) TO 'CHOT 7 


SPACES 


. IF 
L.DA 
JSR 


DEBUG 

#' 

CHOT 


TWO SPACES. 


SPACE L.DA # 7 

JMP CHOT 

. END IF 


i ONE SPACE, 
i RETURN. 


CRSNOP — COMPLICATED NOP TO UPDATE CURSOR INHIBIT/ENABLE STATE 


CALLING SEQUENCE: 






; A = 

0 TO ENABLE CURSOR, 

ELSE DISABLE CURSOR. 

E865 

8D 

FO 

02 

CRSNOP STA 

CRSINH 

; SET CURSOR INHIBIT FLAG. 

B868 

A9 

1C 


LDA 

#CUP 

; CURSOR UP . . . 

B86A 

20 

6F 

AF 

JSR 

CHOT 


B86D 

A9 

ID 


LDA 

#CDOWN 

; ... THEN DOWN . . . 

B86F 

4C 

6F 

AF 

JMP 

CHOT 

i ... & RETURN. 






; AUDCLR — 
/ 

CLEAR AUDIO 

REGISTERS AND SELECTS 


B872 

A9 

03 


AUDCLR LDA 

#$03 

; MAGIC CONSTANT 

FROM D. CRANE, 27-AUG-79 

B874 

8D 

32 

02 

STA 

SSKCTL 



B877 

8D 

OF 

D2 

STA 

SKCTL 



B87A 

A9 

00 


LDA 

#0 



B87C 

8D 

08 

D2 

STA 

AUDCTL 

; SET AUDIO TO 4 

INDEPENDENT REGISTERS. 


PILOT 


H. B. STEWART 


BS7F 

A2 

08 


LDX 

BSS1 

9D 

FE 

D1 

AUCOIO STA 

B884 

9D 

FF 

D1 

STA 

B887 

9D 

53 

05 

STA 

B88A 

9D 

54 

05 

STA 

B88D 

CA 



DEX 

B88E 

CA 



DEX 

B88F 

DO 

FO 


BNE 


#AUREGS*2 

AUDF1- 
AUDC1- 
AUDIOR-2, X 
AUD I OR— 1 i X 


AUCOIO 


B891 60 


RTS 


01 CM 


CLEAR ALL ACTIVE TONES. 


CLEAR 


SO' SELECTS. 


PILOT 


H. B. STEWART 


BS92 A9 00 
B894 85 91 

B896 20 CA B8 

B899 20 FA B7 
B89C 84 A7 

B89E 20 E8 A4 
B8A1 DO IF 

B8A3 C9 40 
B8A5 DO IB 

B8A7 A6 91 
B8A9 EO OE 
B8AB FO 18 

B8AD A5 B6 
B8AF 95 93 
B8B 1 A5 B7 
B8B3 95 94 
B8B5 E8 
B8B6 E 8 
B8B7 86 91 

B8B9 20 CA B8 

B8BC 20 IB B9 
B8BF 4C 99 B8 

B8C2 A4 A7 
B8C4 60 

B8C5 A9 02 

E8C7 4C 6C A1 


EXP — ARITHMETIC EXPRESSION EVALUATOR 
CALLING SEQUENCE: 

'INLN' POINTS TO LINE TO BE EVALUATED 
Y = INDEX TO START OF EXPRESSION 


i 

JSR 

EXP 

i 

Y = 

INDEX TO END 1 

i 

'EXPSTK'+O ?y 4-1 = 

/ 

EXP 

LDA 

#0 


STA 

ESTKP 

EXPRC 

JSR 

EXPVAL 

EXP030 

JSR 

SLB 


STY 

TEMP2 


JSR 

ATOM 


BNE 

EXP080 


CMP 

#OPR 


BNE 

EXP080 


LDX 

ESTKP 


CPX 

#ESTKSZ 


BEQ 

EXP 1 92 


LDA 

POINT 


STA 

EXPSTK, X 


LDA 

POINT+1 


STA 

EXPSTK+1, X 



I NX 
INX 
STX 

ESTKP 


JSR 

EXPVAL 


JSR 

JMP 

SOP 

EXP 030 

EXP080 

LDY 

RTS 

TEMP2 

EXP 192 

LDA 

#EXPERR 

EXP 1 94 

JMP 

PSTOP 


INITIALIZE CRITICAL VARIABLES. 

CHECK FOR OPERAND ?y GET VALUE TO STACK. 


SKIP LEADING BLANKS 
SAVE INDEX. 

CHECK FOR OPERATOR. 
INVALID ATOM. 


NOT AN OPERATOR. 

PUSH OPERATOR ROUTINE ADDR TO EXP STACI 
STACK FULL. 


> CHECK FOR OPERAND & GET VALUE TO STACI* 
; OPERATE ON STACK DATA. 


EXPVAL VALIDATE OPERAND & PUSH VALUE TO STACK 
CALLING SEQUENCE: 


I 


Y = INDEX TO 'INLN' 


PILOT 


H. B STEWART 


BSC A 20 FA B7 EXPVAL 

B8CD C9 2D 
B8CF DO OD 

B8D1 C8 
B8D2 20 CA B8 

B8D5 A5 91 
B8D7 18 
B8D8 69 1 1 
B8DA AA 
B8DB 4C 3F B6 


JSR 

EXPVAL 

JSR 

SLB 

CMP 

# 

BNE 

EXV010 

I NY 

JSR 

EXPVAL 

LDA 

ESTKP 

CLC 

ADC 

#EXPSTK-DTAB-2 

TAX 

JMP 

DNEGI 


B8DE C9 28 
B8E0 DO OC 

B8E2 C8 
B8E3 20 96 B8 
B8E6 B 1 80 
B8E8 C9 29 
B8EA DO D9 

B8EC C8 
B8ED 60 

B8EE C9 3F 
B8F0 DO OD 

B8F2 AD OA D2 
B8F5 85 B8 
B8F7 AD OA D2 
B8FA 85 B9 
B8FC C8 
BSFD DO 09 

B8FF 20 E8 A4 
B902 DO C3 

B904 29 86 
B906 FO BD 

B908 A6 91 
B90A EO OE 
B90C FO B7 

B90E A5 BS 
B910 95 93 
B912 A5 B9 
B91 4 95 94 
B91 6 E8 
B91 7 E8 
B918 86 91 
B91 A 60 


EXV010 CMP 
BNE 

I NY 
JSR 
LDA 
CMP 
BNE 

I NY 
RTS 

EXV020 CMP 
BNE 

LDA 
STA 
LDA 
STA 
I NY 
BNE 

EXV030 JSR 
BNE 

AND 

BEQ 

EXV040 LDX 
CPX 
BEQ 

LDA 
STA 
LDA 
STA 
I NX 
I NX 
STX 
RTS 


; SOP — STACK 


# ' < 

EXV020 


EXPRC 
( I NLN ) i Y 
# ' ) 

EXP 1 92 


# '? 

EXV030 

PKYRND 

NUMBER 

PKYRND 

NUMBER+1 

EXV040 

ATOM 
EXP 1 94 

#NUM+NVAR+BPTR 
EXP 192 

ESTKP 
#ESTKSZ 
EXP 1 92 

NUMBER 
EXPSTK, X 
NUMBER+1 
EXPSTK+1 / X 


ESTKP 


r 


OPERATE 




PILOT — H. B. STEWART 


; CALLING SEQUENCE: 


UNARY MINUS? 

NO. 

YES. 

*** RECURSIVE CALL *** 
GET OFFSET TO RESULT. 


NEGATE RESULT RETURN. 

LEFT PAREN? 

NO. 


YES — EVALUATE SUB-EXPRESSION. 

MATCHING RIGHT PAREN? 

NO — ERROR. 

YES — SKIP OVER IT. 


RANDOM NUMBER? 

NO. 

YES — GET RANDOM # FROM POKEY. 


SKIP OVER 
(BRA). 

ERROR. 

NUMERIC VARIABLE, POINTER OR CONSTANT -7 
NO — ERROR. 

RESULT TO STACK. 


STACK OVERFLOW. 


i SOP 


STACK OPERATE 


PILOT — H. B STEWART 


; CALLING SEQUENCE: 


B91B A5 92 

SOP 

LDA 

EXEC 

B91D FO 1C 


BEQ 

S0P050 

B91F 84 A7 


STY 

TEMP2 

B921 A5 91 


LDA 

ESTKP 



. IF 

DEBUG 



CMP 

#6 



BCC 

S0P090 



. END IF 


B923 18 


CLC 


B924 69 11 


ADC 

#EXPSTK- 

B926 A8 


TAY 


B927 AA 


TAX 


B92S CA 


DEX 


B929 CA 


DEX 


B92A B5 80 


LDA 

DTAB» X 

B92C 8D 09 05 


STA 

SJUMP+1 

B92F B5 81 


LDA 

DTAB+1 < X 

B931 8D OA 05 


STA 

SJUMP+2 

B934 CA 


DEX 


B935 CA 


DEX 


B936 20 08 05 


JSR 

S JUMP 

B939 A4 A 7 


LDY 

TEMP2 

B93B 38 

S0P050 

SEC 


B93C A5 91 


LDA 

ESTKP 

B93E E9 04 


SBC 

#4 

B940 85 91 


STA 

ESTKP 

B942 60 


RTS 




. IF 

DEBUG 


S0P090 

LDA 

#INTERR 



JMP 

PSTOP 



. ENDIF 



EXECUTE? 

NO — JUST REJUSTIFY THE STACK. 

GET EXP STACK INDEX. 

SEE IF STACK HAS AT LEAST 3 ENTRIES 
NO — PROBLEM! 

YES — CONVERT STACK INDEX TO 'DTAB' INDEX. 


INDEX TO OPERATOR PROCESSOR ADDRESS. 
GET OPERATE ROUTINE ADDRESS. 


INDEX TO TARGET ENTRY. 
OPERATE ON DATA. 

(CLEAR BORROW). 

ADJUST STACK INDEX. 


INTERNAL BUG. 


PILOT 


H B 


STEWART 


i TEXP 


— EVALUATE TEXT EXPRESSION 
V » POINTER TO START OF TEXT EXPR IN ' I NLN ' 


JSR 

BNE 

TEXP+2 

TEXP+3 


TEXP 

EXECUTE MODE 



B943 A5 92 

TEXP 

LDA 

EXEC 

» 

B945 DO 03 


BNE 

TEX005 


B947 4C 02 B8 


JMP 

SCNEOL 

• 

B94A A9 00 

TEX005 

LDA 

#0 


B94C 85 8F 


STA 

TELN+3 

• 

B94E 85 8E 


STA 

TELN+2 


B950 AD 70 05 


LDA 

CDEST 


B953 8D 71 05 


STA 

CDEST+1 

9 

B956 A9 FF 


LDA 

#*FF 


B958 SD 70 05 


STA 

CDEST 

9 

B95B B 1 80 

TEX010 

LDA 

< I NLN), Y 


B95D 20 EO B7 


JSR 

CHKTRM 


B960 FO 40 


BEQ 

TEX400 

9 






B962 C9 25 


CMP 

# '7. 


B964 FO 13 


BEQ 

TEX 1 00 

9 






B966 C9 40 


CMP 

# 


B968 FO OF 


BEQ 

TEX 100 


END OF TEXT EXPRESSION. 

THE EOL IS NOT PART OF THE RESULTANT TEXT. 

i EXECUTE MODE? 


YES. 

NO — SCAN TO EOL & RETURN. 

IN IT RESULT LENGTH COUNT . . . 

. . . & STARTING INDEX. 

SAVE 'CHOT' DESTINATION. 

YES — RE-ROUTE 'CHOT' OUTPUT TO ' TEXBUF ' 


GET A CHARACTER. 
STATEMENT TERMINATOR? 
YES. 


SPECIAL NUMBER? 
YES. 


; POINTER? 
; YES. 


E96A C9 23 
B96C FO OB 

B96E C 9 24 
B970 FO 07 


CMP 

BEQ 

CMP 

BEQ 


# '# 

TEX 100 
#'$ 


TEX 100 


i NUMERIC VARIABLE DELIMITER? 
; YES. 

; STRING VARIABLE DELIMITER? 

; YES. 



B972 C8 


TEX020 

I NY 





^9 

B973 20 6F 

AF 


JSR 

CHOT 


f 

YES — PRINT TEXT LITERAL. 

B976 4C 5B 

B9 


JMP 

TEX010 





B979 48 


TEX 100 

PHA 



} 

SAVE THE TEXT CHARACTER. 

# 

B97A 98 



TYA 



1 

SAVE THE Y REG. 


B97B 48 



PHA 





($ 

B97C 20 E8 

A4 


JSR 

ATOM 


i 

GET VALUE. 


B97F FO 05 



BEQ 

TEX220 


i 

0. K. 

# 

B9S1 68 


TEX210 

PLA 



i 

NOT ATOM — RESTORE Y REG 


B982 A8 



TAY 






B983 68 



PLA 



» 

... & CHARACTER. 


B984 DO EC 



BNE 

TEX020 


i 

(BRA). 


B986 C9 10 


TEX220 

CMP 

#USVAR 


i 

UNDEFINED STRING? 


PILOT — H. B. STEWART 


BEQ 


TEX210 


B988 FO F7 


YES 


PRINT LITERALLY. 


BVDO V-V 1U 


itx«.vu cnp 


#USVAR 


PILOT — H. B STEWART 


B988 

FO 

F7 



BEQ 

TEX210 

B98A 

C9 

08 



CMP 

#SVAR 

B98C 

FO 

OA 



BEQ 

TEX300 





* NUMERIC DATA 


B98E 

68 




PLA 


B98F 

68 




PLA 


B990 

A2 

38 



LDX 

#NUMBER-DTAB 

B992 

20 

OB 

B7 


JSR 

DECASC 

B993 

4C 

SB 

B9 


JMP 

TEX010 





i STRING VARIABLE 

B998 

68 



TEX300 

PLA 


B999 

68 




PLA 


B99A 

A2 

42 



LDX 

#DP-DTAB 

B99C 

20 

33 

B 1 


JSR 

PRTSTG 

B99F 

4C 

5B 

B9 


JMP 

TEX010 

B9A2 

AD 

71 

05 

TEX400 

LDA 

CDEST+1 

B9A5 

8D 

70 

05 


STA 

CDEST 





; | 

EXTERNAL 

ENTRY POINT FROM 

B9A8 

A6 

8F 


TRAILB 

LDX 

TELN+3 

B9AA 

E4 

8E 



CPX 

TELN+2 

B9AC 

FO 

OC 



BEQ 

TEX480 

B9AE 

BD 

76 

05 


LDA 

TEXBUF- 1 * X 

B9B1 

C9 

5F 



CMP 


B9B3 

DO 

03 



BNE 

TEX480 

B9B5 

A9 

20 



LDA 

# ' 

B9B7 

9D 

76 

03 


STA 

TEXBUF- 1 > X 

B9BA 

A3 

92 


TEX480 

LDA 

EXEC 


B9BC 60 


RTS 


UNDEFINED STRING? 


i 


i YES — PRINT LITERALLY. 

i DEFINED STRING? 

) YES — PRINT VALUE. 


i NO — MUST BE NUMERIC VALUE. 
i CLEAR STACK. 

> VALUE OF NUMBER. 

I CONVERT TO ASCII *< OUTPUT. 

> CONTINUE. 


; CLEAR THE STACK 


i INDEX TO STRING VALUE. 


i RESTORE 'CHOT' DESTINATION. 


' XACCPT ' *** 

i EXAMINE LAST CHAR OF TEXP. 

l NULL RESULT. 

j GET LAST CHAR IN BUFFER, 
j UNDERSCORE? 
j NO. 

> YES — REPLACE WITH BLANK. 


I THE CC IS BEING SET TO REFLECT THE STATE 
i OF THE 'EXEC' FLAG BECAUSE EVERY SINGLE 
i JSR TO 'TEXP' USED TO BE FOLLOWED BY A 
, 'LDA EXEC' INSTRUCTION. THESE HAVE ALL BEEN 
i BEEN "COMMENTED" QUTi WHEN WILL THIS ALL END? 


PILOT 


H. B. STEWART 


0022 


B93D A9 12 
B9BF DO 06 

B9C 1 A9 11 
B9C3 DO 02 

B9C5 A9 00 

B9C7 85 22 
B9C9 20 92 B8 

B9CC A5 92 
B9CE FO 08 

B9D0 A5 93 
B9D2 85 E6 
B9D4 A5 94 
B9D6 85 E7 

B9D8 20 EE B7 
B9DB 20 92 B8 

B9DE A5 92 
B9E0 FO 11 

B9E2 A5 93 
B9E4 85 E9 
B9E6 A5 94 
B9E8 85 EA 

B9EA A9 00 
B9EC 85 E8 
B9EE 85 EB 

B9F0 20 A7 BA 

B9F3 
B9F3 60 


B9F4 20 92 B8 

B9F7 A5 92 
B9F9 FO F8 

B9FB A5 93 
B9FD 85 F2 
B9FF A5 94 
BA01 85 F3 


i 

i 

i 


herein reside the lower level graphics routines for pilot graphics. 


PENPOS = ICCOMZ 


; 'DRAWTO ' , 'FILLTO' «< "GOTO' SUB 


GFILTO LDA 

#F ILL 

i 

BNE 

GGT005 

i 

GDRWTO LDA 

#DRAW 

i 

BNE 

GGT005 

9 

GGOTO LDA 

#0 

i 

GGT005 STA 

PENPOS 

i 

JSR 

EXP 

i 

LDA 

EXEC 

i 

BEQ 

GGT010 

i 

LDA 

EXPSTK 

$ 

STA 

GXNEW 


LDA 

EXPSTK+1 


STA 

GXNEW+1 


GGT010 JSR 

SKPSEP 

9 

JSR 

EXP 

9 

LDA 

EXEC 

9 

BEQ 

GGT090 

9 

LDA 

EXPSTK 

9 

STA 

GYNEW 


LDA 

EXPSTK+1 


STA 

GYNEW+1 


LDA 

#0 

9 

STA 

GXNEW+2 


STA 

GYNEW+2 


JSR 

GMOVE 

9 

GTT090 



GGT090 RTS 


9 

GTRNTO JSR 

EXP 

9 

LDA 

EXEC 

9 

BEQ 

GTT090 

9 


COMMAND PROCESSORS. 

PEN DOWN. 

(BRA). 

PEN DOWN. 

(BRA). 

PEN UP. 

SET PEN POSITION. 

GET X-COORDINATE. 

EXECUTE MODE? 

NO. 

YES — UPDATE X. 

SKIP OPERAND SEPARATOR. 

GET Y-COORDINATE. 

EXECUTE MODE? 

NO. 

YES — UPDATE Y. 

CLEAR FRACTIONAL PORTION OF X ?< Y 

NOW EFFECT MOVE. 

RETURN. 

GET POLAR ANGLE. 

EXECUTE MODE? 

NO. 


LDA EXPSTK ; YES — UPDATE POLAR ANGLE. 

STA THETA 

LDA EXPSTK+1 

STA THETA+1 


PILOT 


H. B. STEWART 


BA01 85 F3 


EXPSTK+1 
STA THETA+1 


PILOT — H. B. STEWART 


BA03 

4C 

41 

BC 


JMP 

M0D360 

EA06 

A9 

12 


GFIL 

LDA 

#F ILL 

BA08 

DO 

06 



BNE 

GG0005 

BAOA 

A9 

11 


GDRW 

LDA 

#DRAW 

BAOC 

DO 

02 



BNE 

GG0005 

BAOE 

A9 

00 


GGO 

LDA 

#0 

BA10 

85 

22 


GG0005 

STA 

PENPOS 

BA12 

20 

92 

B8 


JSR 

EXP 

BA1 5 

A5 

92 



LDA 

EXEC 

BA17 

FO 

40 



BEQ 

GG0090 

BA1 9 

A9 

01 



LDA 

#1 

BA1B 

20 

C8 

BC 


JSR 

SINVAL 

BA1E 

20 

83 

BD 


JSR 

TMULT 

BA21 

A2 

69 



LDX 

#GYNEW~DTAB 

BA23 

20 

C5 

BD 


JSR 

TADDI 

BA26 

A9 

00 



LDA 

#0 

BA28 

20 

C8 

BC 


JSR 

SINVAL 

BA2B 

20 

83 

BD 


JSR 

TMULT 

BA2E 

A2 

66 



LDX 

#GXNEW-DTAB 

BA30 

20 

C5 

BD 


JSR 

TADDI 

BA33 

4C 

A7 

BA 


JMP 

GMOVE 


BA36 

20 

92 

B8 

GTRN 

JSR 

EXP 

BA39 

A5 

92 



LDA 

EXEC 

EA3B 

FO 

1C 



BEQ 

GTR090 

BA3D 

84 

AB 



STY 

XTEMP 

BA3F 

A2 

72 



LDX 

#THETA-DTAB 

BA41 

AO 

13 



LDY 

#EXPSTK-DTAB 

BA43 

20 

80 

B5 


JSR 

DADDI 

BA46 

A4 

AB 



LDY 

XTEMP 

BA48 

4C 

41 

BC 


JMP 

M0D360 


BA4B 

A2 

D3 


GPEN 

LDX 

#PCTAB-CTAB 

BA4D 

20 

10 

A3 


JSR 

CMATCH 

BA50 

DO 

08 



BNE 

GPN099 

BA52 

A5 

92 



LDA 

EXEC 

BA54 

FO 

03 



BEQ 

GPN090 

BA56 

8E 

53 

05 


STX 

PEN 


BA59 


GG0090 


MODULO 360 & RETURN. 


PEN DOWN. 


PEN DOWN. 


PEN UP. 

SET PEN POSITION. 

GET MAGNITUDE OP MOVE. 

EXECUTE MODE? 

NO. 

COS (THETA) = SIN ( THETA+90 ) . 

GY = GY + <<EXP> * COS (THETA)) 


GX = GX + ( <EXP> * SIN(THETA) ) 


NOW EFFECT MOVE RETURN. 


POLAR ANGLE DELTA THETA. 

EXECUTE MODE? 

NO. 

YES — SAVE INDEX. 

THETA = THETA + DELTA. 


MODULO 360 & RETURN. 


MATCH OPERAND. 

NO MATCH. 

EXECUTE MODE? 
NO. 


YES 


SET PEN COLOR. 


PILOT — H B STEWART 


BA59 
BA59 60 

BA5A 4C 6C A1 


GTR090 
GPN090 RTS 

GPN099 JMP 


PSTOP 


BA5D A5 92 
BA5F FO 38 

BA61 84 AB 


©EXIT LDA 
BEQ 

STY 


EXEC 

GEX090 


i EXECUTE MODE? 
i NO. 


XTEMP 

1 CL0SE GRAPHICS SCREEN BY CLOSING 'S' & 'E' AND OPENING 'E' 

i CLOSE 'S'. 


BA63 A2 20 

LDX 

# I 0CB2 

BA65 20 FD BO 

JSR 

DCLOSE 

BA68 A2 00 

LDX 

#1 OCBO 

BA6A 20 FD BO 

JSR , 

DCLOSE 


i *S* LDX 

#0 

BA6D 8E 54 05 

STX 

GRFLAG 

BA70 A9 45 

LDA 

#'E 

BA72 8D 60 05 

STA 

OPNBUF 

BA75 A9 9B 

LDA 

#EOL 

BA77 8D 61 05 

STA 

OPNBUF+1 

BA7A A9 OC 

LDA 

#OREAD+OWRIT 

BA7C 20 B7 BO 

JSR 

DOPEN 


i CLOSE 'E'. 

i RESET GRAPHICS MODE FLAG, 
i PUT "E" IN OPEN BUFFER. 


OPEN 


AGAIN. 


; MOVE THE STRING STORAGE AREA UPWARD TO RE-CAPTURE THE SPACE USED 
; BY THE GRAPHICS SCREEN. 


; *** EXTERNAL ENTRY FROM 'INIT' ■*** 

'MBC ' 


BA7F 38 

GEX050 

SEC 


i 

BA80 A5 B4 


LDA 

S2H 


BA82 E5 B2 


SBC 

S2L 


BA84 85 DA 


STA 

MBC 


BA86 A5 B5 


LDA 

S2H+1 


BA88 E5 B3 


SBC 

S2L.+ 1 


BA8A 85 DB 


STA 

MBC + 1 


BA8C A5 B2 


LDA 

S2L 

# 

BA8E 85 D 6 


STA 

MSP 


BA90 A5 B3 


LDA 

S2L+1 


BA92 85 D7 


STA 

MSP + 1 


BA94 20 77 BO 


JSR 

GS0100 

i 

BA97 A4 AB 


LDY 

XTEMP 


BA99 

GCL090 



— 

BA99 60 

GEX090 

RTS 




,• *** CALLED BY 

' XRUN ' TOO 








'S2H ' 


' S2L ' (BYTE COUNT) 


'MSP' = 'S2L ' (SOURCE) 


; SETUP ADDITIONAL PARMS & MOVE THE DATA. 
















PILOT 


H. B. STEWART 


PILOT 


H. B. 


STEWART 


BA9A 

A5 

92 

GCLEAR LDA 

EXEC 

BA9C 

FO 

FB 

BEQ 

GCL090 

BA9E 

A9 

00 

LDA 

#0 

BAAO 

85 

54 

STA 

ROWCRS 

BAAS 

A9 

7D 

LDA 

4CLEAR 

BAA4 

4C 

3C B 1 

JMP 

TOUT 


EXECUTE MODE? 
NO. 


TO AVOID ERROR $8D IF CURSOR AT LOWER 
. .. RIGHT CORNER OF SCREEN. 

VES — CLEAR GRAPHICS SCREEN . . . 

. . . & RETURN. 



H B STEWART 


PILOT — 


BAA7 84 EO 
BAA9 AiT OC 

BAAB 
BAAO 
BAAE 
BABO 
BAB2 
BAB4 
BAB6 
BAB8 
BABA 
BABC 
BABE 
BABF 
BACO 
BAC 1 

BAC3 AD 53 05 
BAC6 8D FB 02 
BAC9 8D FD 02 
BACC C9 04 
BACE FO 04 

BADO A5 22 
BAD2 DO 03 

BAD4 4C BF BB 


i LOWER LEVEL GRAPHICS UTILITIES 
GMOVE STY i f 


GMV010 ( LDA 
ROL 
LDA 
ADC 
STA 
LDA 
ADC 
STA 
LDA 


GXNEW-1, X 
A 

GXNEW-3* X 

#0 

GX1-3, X 
GXNEW-2, X 

#0 

GX 1 -2/ X 
#0 


i SAVE Y REGISTER 
i 4 VARIABLES OF 3 BYTES EACH. 


i MOVE COORDINATES TO WORKING VARIABLES. 
; PREPARE TO ROUND. 
i GET MIDDLE BYTE. 
i ADD MSB OF FRACTION. 

i GET MSB. 

i CONTINUE ROUNDING, 
i NOW CLEAR FRACTION. 




v^STA 

GX 1-1 > X 



DEX~ 




DEX 




DEX 




BNE 

GMV010 



LDA 

PEN 

; PEN 

COLOR = 7 UP 7 ? 

STA 

ATACHR 

i SET 

COLOR FOR DISPLAY 

STA 

FILDAT 

i SET 

FILL DATA TOO. 

CMP 

#PCUP 



BEQ 

GMV10B 

i YES 

— NO PLOTTING. 

LDA 

PENPOS 

; PEN 

POSITION? 

BNE 

GMV011 

; DOWN. 

JMP 

GMV150 

; UP. 



BAD7 A2 4A 
BAD9 AO 3E 
BADB 20 CF B3 


GMV011 


LDX 

LDY 

JSR 


#DELX-I)TAB 

#GX1-DTAB 

DMOVI 


; COMPUTE DELTA X AND DELTA Y. 
; "DELX 7 = 'GX1 7 . . . 


BADE AO 44 

LDY 

4GX2-DTAB 

; . . . - 7 GX2 7 . 


BAEO 20 90 B5 

JSR 

DSUBI 



BAE3 70 20 

B VS 

GMVOVF 

i DELTA X EXCEEDS 

MAXIMUM. 

BAE5 A2 4C 

LDX 

#DELY-DTAB 

; 7 DELY 7 = 7 GY1 7 . 


BAE7 AO 41 

LDY 

#GY1-DTAB 



BAE9 20 CF B3 

JSR 

DMOVI 



BA EC AO 47 

LDY 

#GY2-DTAB 

; . . . - 7 GY2 7 . 


BAEE 20 90 B5 

JSR 

DSUBI 



BA FI 70 12 

B VS 

GMVOVF 

; DELTA Y EXCEEDS 

MAXIMUM. 

i 

CHECK FOR 

LINE SEGMENT WITHIN 

SCREEN LIMITS 





THE CLIPPING ALGORITHM USED HERE IS DESCRIBED IN SECTION 5~1 OF THE 
SECOND EDITION OF "PRINCIPLES OF INTERACTIVE COMPUTER GRAPHICS" BY 
NEWMAN & SPROULL. 



BAF3 A2 

3 E 

GMV012 

LDX 

#GX1-DTAB 

; TEST 

END POINT. 


BAF5 20 

DD BB 


JSR 

INTEST 


o 

BAF8 85 

F4 


STA 

GNUMB 

i SAVE 

RESULT. 


BAFA A2 

44 


LDX 

#GX2-DTAB 

; TEST 

END POINT. 


BAFC 20 

DD BB 


JSR 

INTEST 











% 

PILOT — H. B. 

STEWART 














PILOT 


H. B STEWART 


BAFF 85 F5 

STA 

GNUMB+1 

BBOl 25 F4 

AND 

GNUMB 

BB03 FO 03 

BEQ 

GMV013 

BB05 4C D7 BB 

GMVOVF JMP 

GMV157 

BB08 A5 F4 

GMV013 LDA 

GNUMB 

BBOA 05 F5 

ORA 

GNUMB+1 

BBOC DO 03 

BNE 

GMV014 

BBOE 4C AO BB 

JMP 

GMV120 

BB 1 1 A2 3E 

GMV014 LDX 

#GX 1-DTAB 

BB 13 A5 F4 

LDA 

GNUMB 

BB 1 5 DO 04 

BNE 

GMV015 

BB 1 7 A2 44 

LDX 

#GX2-DTAB 

BB 19 A5 F5 

LDA 

GNUMB+1 

BB IB 48 

GMV015 PHA 


BB 1C 29 08 

AND 

#ELEFT 

BB IE FO 08 

BEQ 

GMV020 

BB20 A9 B 1 

LDA 

#-XC+l 

BB22 85 CE 

STA 

GACC 

BB24 A9 FF 

LDA 

#-l 

BB26 DO OC 

BNE 

GMV025 

BB28 68 

GMV020 PLA 


BB29 48 

’ PHA 


BB2A 29 04 

AND 

#ER IGHT 

BB2C FO 33 

BEQ 

GMV030 

BB2E A9 4F 

LDA 

#XC-1 

BB30 85 CE 

STA 

GACC 

BB32 A9 00 

LDA 

#0 

BB34 85 CF 

GMV025 STA 

GACC+1 

BB36 AO 4E 

LDY 

#GACC-DTAB 

BB38 20 CF B3 

JSR 

DMOVI 

BB3B 8A 

TXA 


BB3C 48 

PHA 


BB3D A2 4E 

LDX 

#GACC-DTAB 

BB3F AO 6C 

LDY 

#GX-DTAB 

BB41 20 BO BE 

JSR 

RSUBI 

BB44 AO 4C 

LDY 

#DELY-DTAB 

BB46 20 D9 BD 

JSR 

QMULT 

BB49 AO 4A 

LDY 

#DELX-DTAB 

BB4B 20 3C BE 

JSR 

GDI V 


. IF 

DEBUG 


BNE 

. ENDIF 

GMV041 

BB4E AO 6F 

LDY 

#GY-DTAB 

BB50 20 A9 BE 

JSR 

RADDI 


i 


SAVE RESULT. 


• PART OF LINE MAY BE IN SCREEN. 

> NO PART OF LINE IS IN SCREEN. 

' PART OF LINE IS OFF THE SCREEN. 

; ALL OF LINE IS IN SCREEN. 

; FIND AN INTERSECTION WITH AN EDGE 
; IS XI, Y1 OUTSIDE SCREEN? 

; YES. 

i NO — THEN X2, Y2 MUST BE. 

i SAVE INTERSECT STATUS, 
i LEFT EDGE INTERSECTION? 
i NO. 

; YES — ' GACC ' = LEFT EDGE X VALUE. 

; (BRA). 
i GET STATUS. 

; RIGHT EDGE INTERSECTION? 

; NO. 

i YES — 'GACC 7 = RIGHT EDGE X VALUE. 

i EXTEND SIGN. 

> GX1 OR GX2 = 'GACC'. v 


; GY 1 OR GY2 = (GACC -GX ) * DELY / DELX + GY. 


i OVERFLOW 


DON'T DRAW. 


PILOT — H. B. STEWART 


BB53 68 

PLA 

BB54 AA 

TAX 

BB55 A5 CE 

LDA 

BB57 95 83 

STA 

BB59 A5 CF 

LDA 

BB5B 95 84 

STA 

BB5D 68 

PLA 

BB5E 4C F3 BA 

JMP 

BB61 68 

GMV030 PLA 

BB62 48 

PHA 

BB63 29 02 

AND 

BB65 FO 08 

BEQ 

BB67 A9 D1 

LDA 

BB69 85 CE 

STA 

BB6B A9 FF 

LDA 

BB6D DO 06 

BNE 

BB6F 

GMV040 


. IF 


PLA 


PHA 


AND 


BNE 


GMV041 LDA 


JMP 


GMV042=* 


. END IF 

BB6F A9 2F 

LDA 

BB71 85 CE 

STA 

BB73 A9 00 

LDA 

BB75 85 CF 

GMV045 STA 

BB77 95 84 

STA 

BB79 A5 CE 

LDA 

BB7B 95 83 

STA 

BB7D 8A 

TXA 

BB7E 48 

PHA 

BB7F A2 4E 

LDX 

BB81 AO 6 F 

LDY 

BB83 20 BO BE 

JSR 

BB86 AO 4A 

LDY 

BB88 20 D9 BD 

JSR 

\ 

BEBB AO 4C 

LDY 

BB8D 20 3C BE 

JSR 


. IF 


BNE 

* 

. END IF 

BB90 AO 6C 

LDY 

BB92 20 A9 BE 

JSR 

BB95 68 

PLA 

BB96 AA 

TAX 

mL — 1 | ■ B 



PILOT — H. B. STEWART 


GACC 

DTAB+3, X 
GACC-t-1 
DTAB+4/ X 

GMV012 


#EBOTOM 

GMV040 

#— YC+1 

GACC 

#-l 

GMV045 


DEBUG 


#ETOP 

GMV042 

#INTERR 

PSTOP 


#YC — 1 
GACC 
#0 

GACC+1 
DTAB+4, X 
GACC 

DTAB+3, X 


#GACC-DTAB 

#GY-DTAB 

RSUBI 

#DELX-DTAB 

QMULT 

#DELY-DTAB 

QDIV 

DEBUG 

GMV041 


#GX-DTAB 

RADDI 


i CLEAR STACK. 

; KEEP THIS UP UNTIL LINE SEGMENT IS CLIPPED 
> GET STATUS. 

; BOTTOM EDGE INTER SECT 1 0N"> 

; NO. 

; YES — 'GACC 7 = BOTTOM EDGE Y VALUE. 


; (BRA). 


; GET STATUS. 

J TOP EDGE INTERSECTION? 

; YES. 

; NO — IMPLEMENTATION BUG. 


; 'GACC ' - TOP EDGE Y VALUE. 


; EXTEND SIGN. 

; GY I OR GY2 - 'GACC'. 




; SAVE X REGISTER. 

; GX1 OR GX2 = (GACC - GY) * DELX / DELY + QX 










OVERFLOW. 


DON'T DRAW. 


PILOT — H. B. STEWART 




BB97 AO 4E 
BB99 20 CF B3 
BB9C 68 
BB9D 4C F3 BA 

BBAO A2 00 
BBA2 AO 3E 
BBA4 20 96 BC 

BBA7 A2 06 
BBA9 AO 44 
BBAB 20 96 BC 

BBAE 20 37 BC 

BBB1 A4 EO 
BBB3 86 A 1 
BBB5 84 A2 
BBB7 A2 1A 
BBB9 20 73 B1 
BBBC 4C 7B AF 


GMV120 


LDY 

#GACC-DTAB 

JSR 

DMOVI 

PLA 


JMP 

GMV012 

LDX 

#0 

LDY 

#GX 1-DTAB 

JSR 

SETCUR 

LDX 

#OLDROW-ROWCRS 

LDY 

#GX2"DTAB 

JSR 

SETCUR 

JSR 

NEWCUR 

LDY 

LE 

STX 

TEMP 

STY 

TEMP+1 

LDX 

#SSPEC— I QVBAS 

JSR 

IOHAND 

JMP 

IOERCK 

(GOTO 

AND GO) 




BBBF 

A2 

3E 


GMV150 

LDX 

#GX 1-DTAB 

BBC 1 

20 

DD 

BB 


JSR 

INTEST 

BBC4 

DO 

1 1 



BNE 

GMV157 

BBC6 

A2 

00 



LDX 

#0 

BBC8 

AO 

3E 



LDY 

#GX1-DTAB 

BBCA 

20 

96 

BC 


JSR 

SETCUR 

BBCD 

AD 

53 

05 


LDA 

PEN 

BBDO 

C9 

04 



CMP 

#PCUP 

BBD2 

FO 

03 



BEQ 

GMV157 

BBD4 

20 

3C 

B 1 


JSR 

TOUT 

BBD7 

20 

37 

BC 

GMV157 

JSR 

NEWCUR 

BBDA 

A4 

EO 



LDY 

LE 

BBDC 

60 




RTS 



CLEAR THE STACK. 

KEEP THIS UP UNI IL LINE SEGMENT IS CLIPPED. 
SET LINE SEGMENT END 


. & START POINTS. 


ESTABLISH NEW CURSOR LOCATION. 

RESTORE Y REGISTER. 

SAVE REGISTERS. 

GO TO 'S: ' SPECIAL ENTRY. 

CHECK FOR ERRORS b RETURN. 


> CHECK FOR POINT IN SCREEN. 

; NOT IN SCREEN — DON'T PLOT. 

; SET NEW CURSOR POSITION. 

CONVERT TO HANDLER COORDINATES. 
PLOT SINGLE POINT. 

PEN COLOR = 'UP 7 ? 

YES — NO POINT PLOT. 


ESTABLISH NEW CURSOR POSITION. 
RESTORE Y REGISTER. 


BBDD 84 A9 
BBDF AO 27 
BBE1 A9 00 
BBE3 48 
BBE4 85 A8 


; INTEST — TEST FOR POINT WITHIN SCREEN LIMITS. 

J 

i CALLING SEQUENCE: 

i 

i X = DTAB OFFSET TO X, Y PAIR (EACH TRIPLE PRECISION) 


JSR 

BEQ 


INTEST 

POINT IN SCREEN 


A = EDGE TEST BITS (OOOOLRBT), WHERE 1=0UT OF BOUNDS FOR THAT EDGE. 

; SAVE Y REGISTER. 

; INITIALIZE RESULT BYTE. 


STY 

TEMP2+2 

LDY 

#TEMP2-DTAB 

LDA 

#0 

PHA 


STA 

TEMP2+1 


PILOT 


H. B STEWART 


BBE6 B 5 81 


LDA 

DTAB+1, X 

BBE8 30 OE 


BMI 

INT010 

BBEA A9 50 


LDA 

#XC 

BBEC 85 A 7 


STA 

TEMP2 

BBEE 20 70 B5 


JSR 

DSCMI 

BBF1 90 16 


BCC 

INT020 

BBF3 68 


PLA 


BBF4 09 04 


ORA 

#ER IGHT 

BBF6 DO 10 


BNE 

INT019 

BBF8 A9 BO 

INT010 

LDA 

#-XC 

BBFA 85 A7 


STA 

TEMP2 

BBFC C6 A8 


DEC 

TEMP2+1 

BBFE 20 70 B5 


JSR 

DSCMI 

BC01 90 02 


BCC 

INT012 

BC03 DO 04 


BNE 

INT020 

BC05 68 

INT012 

PLA 


BC06 09 08 


ORA 

#ELEFT 

BC08 48 

INT019 

PHA 


BC09 E8 

INT020 

I NX 


BCOA E8 


INX 


BCOB E8 


INX 


BCOC A9 00 


LDA 

#0 

BCOE 85 AS 


STA 

TEMP2+1 

BC1G B5 81 


LDA 

DTAB + 1 / X 

BC12 10 12 


BPL 

INT030 


BC 14 A9 DO LDA #-YC 

BC 16 85 A7 STA TEMP2 

BC1S C6 AS DEC TEMP2+1 


BC 1 A 20 70 B5 


JSR 

DSCMI 

BC1D 90 02 


BCC 

INT022 

BC IF DO 12 


BNE 

INT040 

BC21 68 

INT022 

PLA 


BC22 09 02 


ORA 

#EBOTOM 

BC 24 DO OC 


BNE 

INT039 

BC 26 A9 30 

INT030 

LDA 

#YC 

BC28 85 A7 


STA 

TEMP2 

BC2A 20 70 B5 


JSR 

DSCMI 

BC2D 90 04 


BCC 

INT040 

BC2F 68 


PLA 


BC30 09 01 


ORA 

#ETOP 

BC32 48 

INT039 

PHA 


BC33 A4 A9 

INT040 

LDY 

TEMP2+2 

BC35 68 


PLA 


BC36 60 


RTS 



PILOT 


H. B. STEWART 


CHECK SIGN OF POSITION. 

NEGATIVE — COULDN'T BE BEYOND RIGHT EDGE. 

SETUP RIGHT EDGE X POSITION. 

TEST RIGHT EDGE. 

INSIDE SCREEN. 

OUTSIDE — SET STATUS BIT. 

< BRA ) . 

SETUP LEFT EDGE POSITION. 


TEST LEFT EDGE. 

OUTSIDE. 

INSIDE. 

OUTSIDE — SET STATUS BIT. 


ADVANCE TO Y POSITION. 


CHECK SIGN OF POSITION. 

POSITIVE — COULDN'T BE BELOW BOTTOM EDGE. 


SETUP BOTTOM EDGE POSITION. 


TEST BOTTOM EDGE. 

OUTSIDE. 

INSIDE. 

OUTSIDE — SET STATUS BIT. 

< BRA ) . 

SETUP TOP EDGE POSITION. 

TEST TOP EDGE. 

INSIDE. 

OUTSIDE — SET STATUS BIT. 





RESTORE Y REGISTER. 

GET STATUS BYTE FOR EXIT. 


PILOT 


H. B. STEWART 





; NEWCUR — 

MOVE NEW CURSOR TO CURRENT CURSOR. 

BC37 

A2 

06 

i 

NEWCUR LDX 

#6 i 2 VARIABLES OF 3 BYTES EACH 

BC39 

B5 

E5 

NWC010 LDA 

GXNEW-1 i X 

BC3B 

95 

EB 

STA 

GX-1, X 

BC3D 

CA 


DEX 


BC3E 

DO 

F9 

BNE 

NWC010 

BC40 

60 


RTS 







; M0D360 — 

'THETA ' = 'THETA' 

MODULO 360 

BC41 

A5 

F3 


M0D360 

LDA 

THETA+1 

9 

SEE IF ANGLE IS NEGATIVE. 

BC43 

10 

20 



BPL 

M0D020 

9 

NO. 

BC45 

A2 

72 



LDX 

#THETA-DTAB 

i 

YES. 

BC47 

20 

3F 

B6 


JSR 

DNEGI 

i 

GET ABSOLUTE VALUE. 

BC4A 

A5 

F3 



LDA 

THETA+1 

i 

THETA = 32768 IS A SPECIAL CASE. 

BC4C 

30 

3F 



BMI 

M0D030 



BC4E 

20 

41 

BC 


JSR 

M0D360 

9 

*** RECURSIVE CALL *** 

BC51 

A5 

F2 



LDA 

THETA 

9 

TEST FOR RESULT « 0. 

BC 53 

05 

F3 



ORA 

THETA+1 



BC55 

FO 

OD 



BEQ 

M0D019 

9 

YES — DONE. 

BC57 

A9 

68 



LDA 

#360 

9 

NO — THETA = 360 - MOD ( ABS ( THETA 

BC59 

38 




SEC 




BC5A 

E5 

F2 



SBC 

THETA 



BC5C 

85 

F2 



STA 

THETA 



BC5E 

A9 

01 



LDA 

#360/256 



BC60 

E5 

F3 



SBC 

THETA+1 



BC62 

85 

F3 



STA 

THETA+1 



BC64 

60 



M0D019 

RTS 




BC65 

A5 

F3 


M0D020 

LDA 

THETA+1 

9 

COMPARE WITH 360. 

BC67 

C9 

01 



CMP 

#360/256 



BC69 

DO 

04 



BNE 

M0D025 



BC6B 

A5 

F2 



LDA 

THETA 



BC6D 

C9 

68 



CMP 

#360 



BC6F 

90 

24 


M0D025 

BCC 

M0D090 

) 

THETA < 360. 

BC71 

A9 

68 



LDA 

#360 

9 

PREPARE TO DIVIDE BY 360. 

BC73 

85 

A7 



STA 

TEMP2 



BC75 

A9 

01 



LDA 

#360/256 



BC77 

85 

AS 



STA 

TEMP2+1 



BC79 

84 

A9 



STY 

TEMP2+2 



BC7B 

A2 

72 



LDX 

#THETA-DTAB 



BC7D 

AO 

27 



LDY 

#TEMP2-DTAB 



BC7F 

20 

D5 

B5 


JSR 

DDIVI 



BC82 

A4 

A9 



LDY 

TEMP2+2 





r 

PILOT — H. B. STEWART 




# 





• 

BC84 A5 A 1 
BC86 85 F2 
BC8S A5 A2 
BC8A 85 F3 


LDA 

STA 

LDA 

STA 

TEMP 

THETA 

TEMP+1 

THETA+1 

a 

BC8C 60 


RTS 


a 

a 

BC8D A9 08 
BC8F 85 F2 
BC91 A9 00 
BC93 85 F3 

M0D030 

LDA 

STA 

LDA 

STA 

#8 

THETA 

#0 

THETA+1 


BC95 60 

M0D090 

RTS 



i REMAINDER IN 'TEMP' AFTER DIVIDE 


32768 MOD 360 = 8 


; SETCUR — SET HANDLER CURSOR 
/ 

> CALLING SEQUENCE: 


X = 0 FOR CURRENT CURSOR, 6 FOR PRIOR CURSOR. 

Y = DTAB OFFSET TO TRIPLE PRECISION X, Y POSITION. 





I 

JSR 

SETCUR 

BC96 B9 
BC99 18 

80 

00 

SETCUR 

LDA 

CLC 

DTAB, Y 

BC9A 69 
BC9C 95 

50 

55 



ADC 

STA 

#XC 

COLCRS, X 

BC9E 38 




SEC 


BC9F A9 

30 



LDA 

#YC 

BCA 1 F9 

83 

00 


SBC 

DTAB+3, Y 

BCA4 95 

54 



STA 

ROWCRS, X 

BCA6 60 




RTS 



; (CLEAR BORROW) 








7 


i 


i GREAD — READ GRAPHICS DATA FROM SCREEN. 

i 

i CALLING SEQUENCE: 

( 

TO t:O CAT I O NTO ftfcAD. 

JSR GREAD 

A * VALUE OF PIXEL AT CURSOR LOCATION 


BCA7 

A5 

92 


GREAD 

LDA 

EXEC 

# 

EXECUTE MODE? 

BCA9 

FO 

1C 



BEQ 

GRD090 

i 

NO. 

BCAB 

AD 

54 

05 


LDA 

GRFLAG 

i 

YES — GRAPHI 

BCAE 

FO 

17 



BEQ 

GRD090 

j ' 

NO. 

BCBO 

A2 

3E 



LDX 

#GX1-DTAB^^ 


YES — CHECK 1 

BCB2 

20 

DD 

BB 


JSR 

INTEST 








— CHECK FOR POINT IN SCREEN LIMITS. 




PILOT — H. B STEWART 



PILOT 


H. B. STEWART 


BCB5 

DO 

OE 



BNE 

GRD080 

BCB7 

98 




TYA 


BCB8 

48 




PHA 


BCB9 

A2 

00 



LDX 

#0 

BCBB 

AO 

3E 



LDY 

#GX l-DTAB i 

BCBD 

20 

96 

BC 


JSR 

SETCUR 

BCCO 

68 




PLA 


BCC 1 

A8 




TAY 


BCC2 

4C 

30 

B 1 


JMP 

TIN 

BCC5 

A9 

00 


GRDOSO 

LDA 

#0 

BCC7 

60 



GRD090 

RTS 



J 


i NOT IN LIMITS — RETURN VALUE OF ZERO 
; SAVE Y REGISTER, 
i SET CURSOR POSITION. 


; RESTORE Y REGISTER. 

; GET PIXEL VALUE & RETURN. 
; RETURN VALUE OF ZERO. 





PILOT 


H. B. STEWART 


BCC8 85 A3 
BCCA 84 A4 
BCCC AO 72 
BCCE 20 9E B6 

BCD1 A9 5A 
BCD3 85 A1 
BCD5 A9 00 
BCD7 85 A2 


SINVAL GET VALUE OF SI N ( THETA+A*90 ) 
CALLING SEQUENCE: 

A = QUADRANT OFFSET (0-3) 

'THETA' = ANGLE (0-359) 

'-'SR SINVAL 


'TEMP' = SIN (THETA + A*90 ) 


SINVAL STA 

TEMP+2 

; SAVE QUADRANT OFFSET. 


STY 

TEMP+3 


LDY 

#THETA— DTAB 

; 'ACC' = 'THETA' 


JSR 

DLOADA 

i X = 'ACC' - 'DTAB'. 


LDA 

#90 

; 'TEMP ' = 90. 


STA 

TEMP 



LDA 

#90/256 



STA 

TEMP+1 




/ NORMALIZE THETA TO 0 90 RANGE AND USE TRIG EQUALITIES TO COMPUTE SINE 


BCD9 AO 21 

SNVOl 0 LDY 

#TEMP— DTAB 

i 

IS 'ACC' <= 90. 

BCDB 20 63 B5 

JSR 

DCMPI 


BCDE FO 09 

BEQ 

SNV020 

i 

YES. 

BCEO 90 07 

BCC 

SNV020 

i 

YES. 

BCE2 E6 A3 

INC 

TEMP+2 


NOT YET — INCREMENT QUADRANT. 

BCE4 20 90 B5 

JSR 

DSUBI 


'ACC' = 'ACC' - 90. 

BCE7 DO FO 

BNE 

SNV010 


(BRA UNLESS RESULT = 0). 

BCE 9 A6 E2 

SNV020 LDX 

ACC 


RESULT IS 0 TO 90 FOR TABLE LOOKUP 

BCEB A5 A3 

LDA 

TEMP+2 


QUADRANT #. 

BCED 29 03 

AND 

#$03 


MODULO 4. 

BCEF FO 18 

BEQ 

SNV100 


QUADRANT 0. 

BCF1 C9 01 

CMP 

#1 



BCF3 DO 08 

BNE 

SNV040 



BCF5 A9 5A 

LDA 

#90 

/ 

QUADRANT 1. 

BCF7 E5 E2 

SBC 

ACC 



BCF9 AA 

TAX 




BCFA 4C 09 BD 

JMP 

SNV100 



BCFD C9 02 

SNV040 CMP 

#2 



BCFF FO 20 

BEQ 

SNV150 

i 

QUADRANT 2. 

BD01 A9 5A 

LDA 

#90 

# 

QUADRANT 3. 

BD03 E5 E2 

SBC 

ACC 



BD05 AA 

TAX 




BD06 4C 21 BD 

JMP 

SNV150 



BD09 A9 00 

SNV100 LDA 

#0 

I 

GET VALUE FROM TABLE. 

BDOB EO 57 

CPX 

#87 

i 

87 THRU 90? 

BDOD 90 08 

BCC 

SNV120 

i 

NO — USE TABLE. 

BDOF 85 A1 

STA 

TEMP 

$ 

SPECIAL CASE — FORCE TO 1.0. 

BD11 A9 01 

LDA 

#1 




PILOT — H. B. STEWART 

CTA TCMP+1 


n r\ < n oc A n 


PILOT 


H. B STEWART 


BD13 85 A2 
BD15 DO 12 

BD17 85 A2 
BD19 BD 2C BD 
BD1C 85 A1 
BD1E 4C 29 BD 

BD21 20 09 BD 
BD24 A2 21 
BD26 20 3F B6 

BD29 A4 A4 
BD2B 60 


SNV120 


SNV150 


SNV900 


STA 

TEMP+1 

BNE 

SNV900 

STA 

TEMP+1 

LDA 

SINTAB, X 

STA 

TEMP 

JMP 

SNV900 

JSR 

SNV100 

LDX 

#TEMP-DTAB 

JSR 

DNEGI 

LDY 

RTS 

TEMP+3 


; (BRA). 
i MSB = 0. 

; LSB = VALUE FROM TABLE. 


i GET VALUE TO 'TEMP ' *** 
i THEN NEGATE VALUE. 


BD2C 

BD2C 00 04 09 
BD2F OD 12 
BD31 16 IB IF 
BD34 24 28 


; SINE TABLE VALUES FOR 0 THROUGH 86 
SINTAB=* SIN ( X ) * 256 

. BYTE 0, 4, 9, 13, 18 
• BYTE 22» 27/ 31/ 36/ 40 


DEGREES 

X 

i 0-4 
; 5-9 


BD36 2C 31 35 

. BYTE 

44/ 49/ 53, 58, 62 


10-14 


BD39 3A 3E 


i 


BD3B 42 47 4B 
BD3E 4F 53 

. BYTE 

66, 71, 75, 79, 83 

i 

15-19 


BD40 58 5C 60 
BD43 64 68 

. BYTE 

88, 92, 96, 100, 104 

# 

20-24 


BD45 6C 70 74 

. BYTE 

108, 1 12, 116, 120, 124 


25-29 


BD48 78 7C 




BD4A 80 84 88 
BD4D 8B 8F 

. BYTE 

128, 132, 136, 139, 143 

i 

30-34 


BD4F 93 96 9A 
BD52 9E A1 

. BYTE 

147, 150, 154, 158, 161 

9 

35-39 


BD54 A5 A8 AB 
BD57 AF B2 

. BYTE 

165, 168, 171, 175, 178 

i 

40-44 


BD59 B5 B8 BB 
BD5C BE Cl 
BD5E C4 C7 CA 
BD61 CC CF 

. BYTE 

181, 184, 187, 190, 193 

9 

45-49 


. BYTE 

196, 199, 202, 204, 207 

9 

50-54 


BD63 D2 D4 D7 
BD66 D9 DB 

. BYTE 

210, 212, 215, 217, 219 

9 

55-59 


. BYTE 

222, 224, 226, 228, 230 

9 

60-64 


BD68 DE EO E2 
BD6B E4 E6 

BD6D E8 EA EC 
BD70 ED EF 

. BYTE 

232, 234, 236, 237, 239 

9 

65-69 


BD72 FI F2 F3 
BD75 F5 F6 

. BYTE 

241, 242, 243, 245, 246 

9 

70-74 


BD77 F7 F8 F9 
BD7A FA FB 
BD7C FC FD FE 
BD7F FE FF 

. BYTE 

247, 248, 249, 250, 251 

9 

75-79 


. BYTE 

252, 253, 254, 254, 255 

9 

80-84 


BD81 FF FF 

. BYTE 

255, 255 

9 

85-86 




PILOT 


H. B STEWART 


% 


TMULT TRIPLE PRECISION MULTIPLY 

CALLING SEQUENCE: 

' EXPSTK ' = WORD OF SIGNED DATA 
'TEMP' = WORD OF SIGNED DATA 



i 

JSR 

TMULT 



'GNUMB 

'+1 = MSB 



'GNUMB 

'+0 = MIDD 



'GNUMB 

' +2 = LSB 

BD83 A9 00 

TMULT 

LDA 

#0 

BD85 85 F4 


STA 

GNUMB 

BD87 85 F5 


STA 

GNUMB+1 

BD89 85 F6 


STA 

GNUMB+2 

BD8B 85 A6 


STA 

TEMP+5 

BD8D 85 A5 


STA 

TEMP+4 

BD8F A5 A2 


LDA 

TEMP+1 

BD91 10 02 


BPL 

TMU005 

BD93 C6 A6 


DEC 

TEMP+5 

BD95 A5 94 

TMU005 

LDA 

EXPSTK+1 

BD97 10 02 


BPL 

TMU008 

BD99 C6 A5 


DEC 

TEMP+4 

BD9B A2 18 

TMU008 

LDX 

#24 

BD9D 06 A 1 

TMU010 

ASL 

TEMP 

BD9F 26 A2 


ROL 

TEMP+1 

BDA1 26 A6 


ROL 

TEMP+5 

BDA3 90 13 


BCC 

TMU020 

BDA5 18 
BDA6 A5 F6 


CLC 

LDA 

GNUMB+2 

BDA8 65 93 


ADC 

EXPSTK 

BDAA 85 F6 


STA 

GNUMB+2 

BDAC A5 F4 


LDA 

GNUMB+O 

BDAE 65 94 


ADC 

EXPSTK+1 

BDBO 85 F4 


STA 

GNUMB+O 

BDB2 A5 F5 


LDA 

GNUMB+1 

BDB4 65 A5 


ADC 

TEMP+4 

BDB6 85 F5 


STA 

GNUMB+1 

BDB 8 CA 

TMU020 

DEX 


BDB 9 FO 09 


BEQ 

TMU090 

BDBB 06 F6 


ASL 

GNUMB+2 

BDBD 26 F4 


RDL 

GNUMB+O 

BDBF 26 F5 


ROL 

GNUMB+1 

BDC 1 4C 9D BD 


JMP 

TMU010 

BDC4 60 

TMU090 

RTS 



CLEAR RESULT REGISTER. 


SIGN EXTENSION BYTES. 

EXTEND SIGN OF 'TEMP' 
SIGN IS POSITIVE. 

SIGN IS NEGATIVE. 

EXTEND SIGN OF 'EXPSTK'. 
SIGN IS POSITIVE. 

SIGN IS NEGATIVE. 

SETUP LOOP COUNT. 








PILOT — H. B. STEWART 









PILOT — H. B. STEWART 














BDC5 

BDC6 

BDC8 

BDCA 

BDCC 

BDCE 

BDDO 

BDD2 

BDD4 

BDD6 

BDD8 


18 

B5 82 
65 F6 
95 82 
B5 80 
65 F4 
95 80 
B5 81 
65 F5 
95 81 
60 


TADDI — TRIPLE PRECISION ADDITION 
CALLING SEQUENCE: 

X = DTAB OFFSET 
JSR TADDI 

DTAB(X) = DTAB ( X ) + 'GNUMB' 

MSB IS DTAB ( X+l ) , MIDDLE IS DTAB<X+0>, LSB IS DTAB(X+2) 


NOTE: 
TADDI 


DTAB+2, X 
GNUMB+2 
DTAB+2; X 
DTAB+O# X 
GNUMB 
DTAB+O, X 
DTAB+1, X 
GNUMB+1 
DTAB + 1, X 


QMULT — 16 * 16 YIELDING 32 BIT SIGNED MULTIPLY 
CALLING SEQUENCE: 


'GACC ' = 2 BYTE MULTIPLICAND. 

Y = DTAB OFFSET TO 2 BYTE MULTIPLIER 



i 

JSR 

QMULT 


i 

# 

'GACC 

' C 4 EYTEJ = ' 

BDD9 A2 04 

# 

QMULT 

LDX 

#4 

BDDB B5 CD 

QML010 

LDA 

GACC — 1 , X 

BDDD 95 D1 


STA 

GTEMP-1 , X 

BDDF A9 00 


LDA 

#0 

BDE1 95 CD 


STA 

GACC-1 , X 

BDE3 95 D5 


STA 

GTEMP2-1 , X 

BDE5 CA 


DEX 


BDE6 DO F3 


BNE 

QML010 

BDE8 B9 80 00 


LDA 

DTAB, Y 

BDEB 85 D6 


STA 

GTEMP2 

BDED B9 81 00 


LDA 

DTAB+1, Y 

BDFO 85 D7 


STA 

GTEMP2+1 

BDF2 10 06 


BPL 

QML015 

BDF4 A9 FF 


LDA 

#-l 

BDF6 85 D8 


STA 

GTEMP2+2 

BDF8 85 D9 


STA 

GTEMP2+3 

BDFA A5 D3 

QML015 

LDA 

GTEMP+1 


— ■ 




EXTEND SIGN. 






PILOT — H. B, STEWART 


5 




BDFC 10 04 

BPL 

QML020 



BDFE A9 FF 

LDA 

#-l 

* 

EXTEI 

BEOO DO 02 

BNE 

QML022 

i 

(BRA 

BE02 A9 00 

QML020 LDA 

#0 



BE04 85 D4 

QML022 STA 

GTEMP+2 



BEOS 85 D5 

STA 

GTEMP+3 



BE08 A2 20 

LDX 

#32 

j 

SETUI 

BEOA 06 D2 

QML030 ASL 

GTEMP 

i 

LONG 

BEOC 26 D3 

ROL 

GTEMP+1 



BEOE 26 D4 

ROL 

GTEMP+2 



BE10 26 D5 

ROL 

GTEMP+3 



BE12 90 19 

BCC 

QML040 

# 

MSB 1 

BE14 18 

CLC 


i 

BIT ! 

BE15 A5 CE 

LDA 

GACC 



BE1 7 65 D6 

ADC 

GTEMP2 



BE1 9 85 CE 

STA 

GACC 



BE IB A5 CF 

LDA 

GACC+1 



BE1D 65 D7 

ADC 

GTEMP2+1 



BE IF 85 CF 

STA 

GACC+1 



BE21 A5 DO 

LDA 

GACC+2 



BE23 65 D8 

ADC 

GTEMP2+2 



BE25 85 DO 

STA 

GACC+2 



BE27 A5 D 1 

LDA 

GACC+3 



BE29 65 D9 

ADC 

GTEMP2+3 



BE2B 85 D1 

STA 

GACC+3 



BE2D CA 

QML040 DEX 


i 

DONE 

BE2E FO OB 

BEG 

QML090 

# 

YES. 

BE30 06 CE 

ASL 

GACC 

i 

LONG 

BE32 26 CF 

ROL 

GACC+1 



BE34 26 DO 

ROL 

GACC+2 



BE36 26 D1 

ROL 

GACC+3 



BE38 4C OA BE 

JMP 

QML030 



BE3 B 60 

QML090 RTS 





i BIT SET — ADD TO PARTIAL. 


GDI V — 32 DIVIDED BY 16 YIELDING 16 BIT SIGNED DIVIDE. 

CALLING SEQUENCE: 

'GACC ' = 4 BYTE DIVIDEND. 

Y = DTAB OFFSET TO 2 BYTE DIVISOR. 


JSR 

BNE 


QDIV 

OVERFLOW 


, GACC'C2 BYTE! = 'GACC'C4 BYTE! / 'DTAB'(Y)C2 BYTE] 
X = DTAB OFFSET TO 'GACC'. 


BE3C 


QDIV 


. IF 


DEBUG 


PILOT 


H. B. STEWART 


PILOT 


H. B. STEWART 







LDA 

DTAB, Y 






ORA 

DTAB+1 , Y 






BEQ 

QDV097 






. END IF 


BE3C 

A9 

21 



LDA 

#32+1 

BE3E 

85 

A1 



STA 

TEMP 

BE40 

A9 

00 



LDA 

#0 

BE42 

85 

D2 



STA 

GTEMP 

BE44 

85 

D3 



STA 

GTEMP+1 

BE46 

B9 

81 

00 


LDA 

DTAB + 1, Y 

BE49 

85 

A2 



STA 

TEMP+1 

BE4B 

10 

08 



BPL 

QDV003 

BE4D 

98 




TYA 


BE4E 

AA 




TAX 


BE4F 

20 

3F 

B6 


JSR 

DNEGI 

BE52 

20 

8F 

BE 


JSR 

QNEGA 

BE55 

A5 

D1 


QDV003 

LDA 

GACC+3 

BE57 

85 

A3 



STA 

TEMP+2 

BE59 

10 

03 



BPL 

QDV006 

BE5B 

20 

8F 

BE 


JSR 

QNEGA 

BE5E 

A2 

52 


QDV006 

LDX 

#GTEMP-DTAB 

BE60 

18 




CLC 


BE61 

26 

CE 


QDV010 

ROL 

GACC 

BE63 

26 

CF 



ROL 

GACC+1 

BE65 

26 

DO 



ROL 

GACC+2 

BE67 

26 

D1 



ROL 

GACC+3 

BE69 

C6 

A1 



DEC 

TEMP 

BE6B 

FO 

OF 



BEQ 

QDV090 

BE6D 

26 

D2 



ROL 

GTEMP 

BE6F 

26 

D3 



ROL 

GTEMP+1 

BE7 1 

20 

63 

B5 


JSR 

DCMPI 

BE74 

90 

EB 



BCC 

QDV010 

BE76 

20 

90 

B5 


JSR 

DSUBI 

BE79 

38 




SEC 


BE7A 

BO 

E5 



BCS 

QDV010 

BE7C 

A5 

A3 


GDV090 

LDA 

TEMP+2 

BE7E 

10 

03 



BPL 

QDV093 

BE80 

20 

8F 

BE 


JSR 

QNEGA 

BE83 

A5 

A2 


QDV093 

LDA 

TEMP+1 

BEB5 

10 

05 



BPL 

QDV096 

BE87 

98 




TYA 


BE88 

AA 




TAX 


BE89 

20 

3F 

B6 


JSR 

DNEGI 

BE8C 

A2 

4E 


QDV096 

LDX 

#GACC~DTAB 


i CHECK FOR DIVIDE BY ZERO. 


i LOOP COUNT. 


; CLEAR REMAINDER TO START. 


; SEE IF DIVISOR IS NEGATIVE. 
; SAVE FOR LATER. 
i NO. 

; YES — NEGATE DIVISOR . . . 


; . . . & DIVIDEND. 

; SEE IF DIVIDEND IS NEGATIVE. 
; SAVE FOR LATER. 

I NO. 

i YES — NEGATE IT. 


i LONG ROTATE LEFT. 

; DONE? 
i YES. 

t 

; NO — REMAINDER * 2. 

i IS REMAINDER < DIVISOR? 

; YES. 

; NO — CORRECT FOR THAT. 
i (BRA). 

; DONE — SEE IF RESULT IS TO BE NEGATED? 
i NO. 

; YES. 

; SEE IF DIVISOR WAS NEGATED AT BEGINNING 
; NO. 

; YES — CORRECT FOR THAT. 


; AS ADVERTISED. 


PILOT 


H. B STEWART 


IF DEBUG 

i CHECK FOR OVERFLOW IN RESULT 


LDA 

GACC+1 

i 

BPL 

QDV098 

i 

LDA 

GACC+2 


AND 

GACC+3 



CHECK MSB OF USABLE PORTION 
POSITIVE. 


QDV097 CMP #-l 

JMP QDV099 


BE8E 60 


GDV098 

LDA 

GACC+2 



ORA 

GACC+3 



. END IF 



QDV099 

RTS 


/ RETURN WITH CC SET. 


,• GNEGA — 4 BYTE NEGATE 


; CALLING SEQUENCE: 

i 

; JSR GNEGA 

i 

i 'GACC'C4 BYTE] = - 'GACC'C4 BYTE] 


BE8F 38 
BE90 A9 00 
BE92 E5 CE 
BE 94 85 CE 

BE96 A9 00 
BE98 E5 CF 
BE9A 85 CF 

BE9C A9 00 
BE 9E E5 DO 
BEAO 85 DO 

BEA2 A9 00 
BEA4 E5 D1 
BEA6 85 D1 

BEA8 60 


GNEGA 





SEC 


LDA 

#0 

SBC 

GACC 

STA 

GACC 

LDA 

#0 

SBC 

GACC+1 

STA 

GACC+1 

LDA 

#0 

SBC 

GACC+2 

STA 

GACC+2 

LDA 

#0 

SBC 

GACC+3 

STA 

GACC+3 

RTS 


; CLEAR BORROW. 




; RADDI — DOUBLE PRECISION ADD WITH ROUND FROM FRACTION 


BEA9 

B9 

82 

00 

t 

RADDI LDA 

DTAB+2/ Y 

BEAC 

2A 



ROL 

A v 

BEAD 

4C 

81 

B5 

JMP 

DADDIX 


GET FRACTION. 

MSB OF FRACTION TO CARRY. 


; RSUBI — DOUBLE PRECISION SUBTRACT WITH BORROW FROM FRACTION 



PILOT 


H. B. STEWART 


; RSUBI — DOUBLE PRECISION SUBTRACT WITH BORROW FROM FRACTION. 


PILOT 


H. B. STEWART 


BEBO 

B9 

82 

00 

RSUBI 

LDA 

DTAB+2, Y 

i GET FRACTION. 

BEB3 

49 

80 



EOR 

#$80 

; INVERT MSB OF FRACTION. 

BEB5 

2A 




ROL 

A 

; INVERTED MSB TO CARRY. 

BEB6 

4C 

91 

B5 


JMP 

DSUBIX 






; GPINIT — 

INITIALIZE GRAPHICS 

PARAMETERS (X/ Y, THETA & PEN COLOR) 

BEB9 

A9 

02 


GPINIT 

LDA 

#2 

; PEN = YELLOW. 

BEBB 

8D 

53 

05 


STA 

PEN 


BEBE 

A2 

OE 



LDX 

#14 

; SET X, Y & THETA TO ZERO. 

BECO 

A9 

00 



LDA 

#0 


BEC2 

95 

E5 


GP 1010 

STA 

GXNEW-1, X 


BEC4 

CA 




DEX 



BEC5 

DO 

FB 



BNE 

GP 1010 



BEC7 60 


RTS 


PILOT 


H. B. STEWART 



BECS A2 08 

BECA BD 53 05 
BECD 85 B6 
BECF ID 54 05 
BED2 FO ID 

BED4 BD 54 05 
BED7 85 B7 
BED9 30 04 

BEDB AO 00 
BEDD B 1 B6 

BEDF 29 IF 
BEE1 A8 
BEE2 B9 F2 BE 
BEE5 9D FE D1 
BEE8 A9 A4 
BEEA 9D FF D1 
BEED CA 
BEEE CA 
BEEF DO D9 

BEF1 60 


i 


i AUDIO TONE 

i 

GENERATION PROCESSOR 

TONES 

LDX 

#AUREGS*2 

i 

T0N010 

LDA 

AUDIOR— 2i X 

i 


STA 

POINT 



ORA 

AUDIOR — 1 , X 

# 


BEQ 

T0N090 

i 


LDA 

AUDIOR— 1 , X 

/ 


STA 

POINT+1 



BMI 

T0N020 

i 


LDY 

#0 

i 


LDA 

(POINT), Y 

T0N020 

AND 

#*1F 

/ 


TAY 




LDA 

AUDTAB, Y 

# 


STA 

AUDF1-2, X 

i 


LDA 

#*A4 

i 


STA 

AUDC1-2, X 



DEX 




DEX 




BNE 

T0N010 



T0N090 RTS 


SETUP TO SCAN REGISTER ASSIGN TABLE 
POINTER TO VARIABLE. 

NULL ENTRY IF RESULT IS ZERO 
END OF ENTRIES. 

FINISH MOVING NON-NULL POINTER. 
NUMERIC CONSTANT. 

NOW GET VALUE. 


MODULO 32. 

GET FREQ FROM TABLE. 
PUT IN HARDWARE. 
QUARTER VOLUME. 


BEF2 

00 



AUDTAB . BYTE 

0 ; REST 

BEF3 

F3 

E6 

D9 

. BYTE 

243, 230, 217, 204, 193, 182 

BEF6 

CC 

Cl 

B6 



BEF9 

AC 

A2 

99 

. BYTE 

172, 162, 153, 144, 136, 128 

BEFC 

90 

88 

80 


BEFF 

79 

72 

6C 

. BYTE 

121, 114, 108, 102, 96, 91 

BF02 

66 

60 

5B 



BF05 

55 

51 

4C 

. BYTE 

85, 81, 76, 72, 68, 64 

BF08 

48 

44 

40 



BFOB 

3C 

39 

35 

. BYTE 

60, 57, 53, 50, 47, 45 

BFOE 

32 

2F 

2D 



BF11 

2A 



. BYTE 

42 


PILOT — H. B. STEWART 


, 

t Mccjcnr 


— MCCCA/5C PCKICCATnO 


PILOT — H. B. STEWART 


BF12 

BF12 29 7F 


BF14 AA 

BF1 5 BD 42 BF 


BF18 85 A7 
BF1 A A9 BF 


BF1C 85 A8 

BF1E AO 00 

BF20 B 1 A7 
EF22 FO OE 


BF24 C8 

BF25 C9 9E 
BF27 FO 06 

BF29 20 6F AF 
BF2C 4C 20 BF 


BF2F 20 60 B8 
BF32 60 


i MESSOT — MESSAGE GENERATOR 

I 

; CALLING SEQUENCE: 

! A = MESSAGE # (INDEX TO INTERNAL TABLE) 

# 

* 
i 

MESSOT=* 


JSR 

MESSOT 


AND 

#$7F 

; MASK OFF SIGN BIT 

. IF 

DEBUG 


BEQ 

MS0100 

; 0 IS ILLEGAL. 

CMP 

#MTSI Z+l 


BCS 

MS0100 

; # IS TOO LARGE. 


. END IF 


. ENDIF 
STA 
LDA 
. IF 
ADC 

. ENDIF 
STA 

LDY 


MS0010 LDA 
BEQ 

I NY 


CMP 

BEQ 


JSR 

JMP 


MS0020 

MS0090 

MS0100 


MESTAB-1 / X 
DEBUG 

#MESO 

TEMP2 

#MES0/256 

DEBUG 

#0 


(TEMP2), Y 
MS0090 


#EOL 

MS0020 

CHOT 

MS0010 

NEWLIN 




DEBUG 

ACC 

#0 

ACC + 1 
#14 

MESSOT 

#ACC-DTAB 

DECASC 

NEWLIN 


; GET MESSAGE ADDRESS DELTA FROM TABLE, 
i ADD TO BASE ADDRESS. 


; DONE (NO EOL AT END), 
i BUMP POINTER. 


i DONE. 






; PRINT # INSTEAD OF CANNED MESSAGE. 




j *** RECURSIVE CALL *** 





Moore Forrm Inc 


PILOT 


H. B. STEWART 







; RDYMES — 

GENERATE "READY" 

MESSAGE SEQUENCE. 

BF33 

84 

A9 


RDYMES STY 

TEMP2+2 

i SAVE Y REG. 

BF35 

20 

60 

B8 

JSR 

NEWLIN 


BF3S 

A9 

01 


LDA 

#RDYTXT 

; "READY" TEXT 

BF3A 

20 

12 

BF 

JSR 

MESSOT 


BF3D 

20 

60 

B8 

JSR 

NEWLIN 


BF40 

A4 

A9 


LDY 

TEMP2+2 


BF42 

60 



RTS 






































PILOT 


H. B. STEWART 


BF43 

5B 

BF44 

61 

BF45 

6E 

BF46 

7D 

BF47 

89 

BF48 

8E 

BF49 

5B 

BF4A 

99 

BF4B 

9F 

BF4C 

A7 

BF4D 

AE 

BF4E 

61 

BF4F 

BA 

BF50 

61 

BF51 

61 

BF52 

61 

BF53 

61 

BF54 

61 

BF55 

61 

BF56 

61 

BF57 

61 

BF58 

C2 

BF59 

D5 

BF5A 

DO 

0018 



; TABLE OF MESSAGE ADDRESSES 

i 

MESTAB . BYTE MES1-ME50 

. BYTE MES2-MES0 

■ BYTE MES3-MES0 

. BYTE MES4-MES0 
. BYTE MES5-MESO 
. BYTE MES6-MES0 
. BYTE MES7-MES0 

• BYTE MES8-MES0 

. BYTE MES9-MES0 

. BYTE MESIO-MESO 

• BYTE MES11-MESO 

. BYTE MES12-MES0 
. BYTE MES13-MES0 
. BYTE MES14-MES0 
■BYTE MES1 5-MESO 

. BYTE MES16-MES0 
. BYTE MES17-MES0 
. BYTE MES18-MES0 
. BYTE MES19-MES0 
. BYTE MES20-MES0 
. BYTE MES21-MES0 
. BYTE MES22-MES0 
. BYTE MES23-MES0 
. BYTE MES24-MES0 

MTSIZ = MESTAB 


BF5B 

BFOO 


; IF 'DEBUG ' = 0 THEN ALL MESSAGES MUST FIT IN ONE MEMORY PAGE. 

MESO=* ; MESSAGE DATA BASE ADDRESS 

. IF DEBUG-1 

MES0=MES0/256*256 i PAGE ALIGN BASE ADDRESS 

. END IF 


BF5B MES7 

BF5B 52 45 41 MES1 .BYTE "READY", O 

BF5E 44 59 00 


BF61 

MES12 

BF61 

MES14 

BF61 

MES15 

BF61 

MES16 

BF61 

MES17 

BF61 

MES18 

BF61 

MES19 

BF61 

MES20 

BF61 

MES21 

BF61 57 48 41 

MES2 


BF64 54 27 53 
BF67 20 54 48 
BF6A 41 54 3F 
BF6D 00 


. IF DEBUG-1 


. END IF 

.BYTE "WHAT'S THAT?", 0 



BF6E 49 4D 4D MES3 


. BYTE 


"IMMEDIATE 0NLY",0 


PILOT 


H. B STEWART 





BF7 1 45 44 49 
BF74 41 54 45 
BF77 20 4F 4E 
BF7A 4C 59 00 


BF7D 44 49 56 
BFBO 49 44 45 
BF33 20 42 59 
BF86 20 30 00 

MES4 

. BYTE 

"DIVIDE BY 0", 0 

BF89 4F 4F 50 
BF8C 53 00 

MES5 

. BYTE 

"OOPS", 0 

BF8E 49 2F 4F 
BF91 20 45 52 
BF94 52 4 F 52 
BF97 20 00 

MES6 

. BYTE 

"I/O ERROR ", 0 

BF99 20 2A 2A 
BF9C 2A 20 00 

MES8 

. BYTE 

" **■* ", 0 

BF9F 4E 4F 20 
BFA2 52 4F 4F 
BFA5 4D 00 

MES9 

. BYTE 

"NO ROOM " , 0 

BFA7 57 48 45 
BFAA 52 45 3F 
BFAD 00 

MES 1 0 

. BYTE 

"WHERE?", 0 

BFAE 55 3A 20 
BFB 1 54 4F 4F 
BFB4 20 44 45 
BFB7 45 50 00 

MESH 

. BYTE 

"U: TOO DEEP " , 0 


MES 12 

. IF 
. BYTE 
. ENDIF 

DEBUG 
"BUG! ", 0 

BFBA 4C 49 4E 
BFBD 45 20 23 
BFCO 3F 00 

MES 13 

. BYTE 

"LINE #?",0 


MES 14 

. IF 
. BYTE 

DEBUG 

"ERROR #",0 


MES 15 

. BYTE 

"PLEASE SHORTEN", 


MES 16 

. BYTE 

"$ VARS: ", EOL 


MES 17 

. BYTE 

"# VARS: ", EOL 


MES18 

. BYTE 

"USE STACK: ", EOL 


MES 19 

. BYTE 

"GR PARMS: " , EOL 


MES20 

. BYTE 

"THETA=", 0 


MES21 

. BYTE 
. ENDIF 

"FREE MEMORY=" , 0 


f PILOT — H. B. STEWART 


EOL 



PILOT 


H. B. STEWART 


BFC2 

54 

4F 

4F 

MES22 

. BYTE 

BFC5 

20 

4D 

41 



BFC8 

4E 

59 

20 



BFCB 

49 

2F 

4F 



BFCE 

53 

00 




BFDO 

2D 

2D 

3E 

MES24 

. BYTE 

BFD3 

20 

00 




00D5 




TABLEN= 

*-MESO 

BFD5 

41 

54 

41 

MES23 

. BYTE 

BFD8 

52 

49 

20 



BFDB 

50 

49 

4C 



BFDE 

4F 

54 

20 



BFE1 

28 

43 

29 



BFE4 

20 

43 

4F 



BFE7 

50 

59 

52 



BFEA 

49 

47 

48 



BFED 

54 

20 

41 



BFFO 

54 

41 

52 



BFF3 

49 

20 

31 



BFF6 

39 

38 

30 



BFF9 

9B 









*=$BFFA 

BFFA 

78 

AO 

. WORD 

BFFC 

00 

05 

. BYTE 

BFFE 

68 

A 1 

. WORD 


. END 


"TOO MANY I/0S",0 


" — > ",0 

i MUST NOT EXCEED OOFF HEX. 

"ATARI PILOT <C) COPYRIGHT ATARI 1980", EOL 


i 

CARTRIDGE OVERHEAD. 

MLE 

$00, $05 i 
PUP ; 

RESTART VECTOR. 

I.D. , BOOT DOS & START CARTRIDGE. 
POWER-UP VECTOR. 


PILOT 


H B STEWART 


SYMBOL TABLE 


ABC090 B852 

ABRTCK 

. B846 

ABTERR 

0087 

ACC 

ACCLNO OOFE 

ACLN 

0088 

ACOLR 1 

0087 

ACOLR2 

A INC OOFB 

ALINE 

OOF 9 

appmhi 

OOOE 

A8C010 

ASC020 B6FC 

ASC090 

B70A 

ASCDEC 

B6B2 

ATACHR 

ATM003 A4FF 

ATM003 

A306 

ATM010 

A30E 

ATM020 

ATM099 A 320 

ATM 100 

A323 

ATM200 

A528 

ATM230 

ATM233 A33A 

ATM260 

A37C 

ATM270 

A383 

ATM290 

ATM300 A38B 

ATM320 

A3A6 

ATM330 

A5B6 

ATM340 

ATM330 A3B0 

ATM360 

A3D3 

ATM400 

A3D4 

ATM300 

ATM600 A3E1 

ATM700 

A3F2 

ATM720 

A3EF 

ATM730 

ATM740 A639 

ATM745 

A64D 

ATM760 

A632 

ATM761 

ATM770 A 662 

ATM7B0 

A67 1 

ATM781 

A673 

ATM782 

ATM784 A67F 

ATM786 

A683 

ATM788 

A68A 

ATM790 

ATM795 A696 

ATM796 

A69B 

ATM797 

A6A2 

ATM798 

ATM79B A6AB 

ATM800 

A6B3 

ATM890 

A6C 1 

ATM895 

ATM900 A6C5 

ATMERR 

0002 

ATMRET 

A6D7 

ATOM 

AT0M2 A4EB 

AUC010 

B881 

AUDC1 

D201 

AUDCLR 

AUDCTL D208 

AUDF1 

D200 

AUDI OR 

0555 

AUDTAB 

AUREGS 0004 

AUTO IN 

0576 

AUTOXT 

0081 

AUX 1 

AUX2 055E 

BELL 

OOFD 

BPTR 

0080 

BREAK 

BUFPNT B 1 48 

BYELOC 

E47 1 

CASSOF 

OOBC 

CASSON 

CCTAB A427 

CDA 

A449 

CDAUTO 

A43B 

CDC 

CDCAL A43F 

CDCASS 

A443 

CDCLR 

A499 

CDDIV 

CDDONE A46D 

CDDOS 

A435 

CDDRW 

A489 

CDDRWT 

CDDUMP A431 

CDE 

A44F 

CDEQ 

A47F 

CDEST 

CDEXIT A49B 

CDFIL 

A495 

CDFILT 

A493 

CDG 

CDGE A47B 

CDGO 

A49 1 

CDGOTO 

A48F 

CDGT 

CDIN A469 

CDJ 

A453 

CDJM 

A451 

CDLE 

CDLIST A42F 

CDLOAD 

A437 

CDLT 

A481 

CDM 

CDMOD A485 

CDMS 

A457 

CDMUL 

A477 

CDN 

CDNE A479 

CDNEW 

A465 

CDNEWV 

A467 

CDOUT 

CDOWN 001 D 

CDPEN 

A497 

CDPLUS 

A47 1 

CDPOS 

CDR A45D 

CDREN 

A43D 

CDRUN 

A433 

CDS 

CDSAVE A439 

CDSUB 

A473 

CDSYNC 

A445 

CDT 

CDTAB A42F 

CDTRC 

A441 

CDTRN 

A48D 

CDTRNT 

CDU A44D 

CDW 

A45F 

CDY 

A461 

CH 

CHKDEV B26C 

CHKEGS 

B7E7 

CHKLN 

AF63 

CHKSE.P 

CHKTRM B7E0 

CH0100 

AF86 

CHOI 10 

AF8F 

CH0120 

CHOT AF6F 

CIO 

E456 

CKD010 

B27C 

CKD090 

CKE090 B7B5 

CKEOA 

B7A4 

CKS090 

B7E6 

CKT090 

CLE010 B790 

CLE020 

B79 1 

CLEAR 

007D 

CLEFT 

CLETTR B788 

CLM010 

B239 

CLN090 

AF6E 

CLOSE 

CLOSEM B237 

CLRPRG 

A9FF 

CMA005 

A3 16 

CMA010 

CMA020 A321 

CMA070 

A331 

CMAT2 

A3 13 

CMATCH 

CND010 A4AD 

CND015 

A4B7 

CND017 

A4B9 

CND030 

CND032 A4CE 

CND040 

A4D2 

CND050 

A4D5 

CND070 

CND080 A4DB 

CNDERR 

0002 

CNU010 

B782 

CNU020 

CNUMBR B77A 

COLORS 

0055 

COLORO 

02C4 

COMBUF 

COND A49D 

CRIGHT 

00 IF 

CRSINH 

02F0 

CRSNOP 

CTAB A33A 

CTABC 

A36E 

CTAB I 

A33A 

CTABR 

CTABXR 054F 

CUP 

001C 

DADDA 

B6A8 

DADDI 

DADDIX B581 

DADDP 

B651 

DADDS 

B64D 

DCLOSE 

DCM010 B56A 

DCM090 

B56F 

DCMPA 

B6AD 

DCMPI 

DCWCI B55D 

DDA010 

B65A 

DDA030 

B65B 

DDA040 

DDI003 B5E2 

DDI006 

B5FB 

DDI008 

B604 

DDI010 

DDI090 B620 

DDI092 

B627 

DDI093 

B62B 

DDI095 

DDIVI B5D5 

DEBUG 

0000 

DEC020 

B721 

DEC030 

DEC040 B73A 

DEC045 

B746 

DEC050 

B756 

DEC060 

DEC 070 B76D 

DECASC 

B70B 

DELX 

OOCA 

DELY 


PILOT 


H. B. STEWART 


OOE2 
0086 
B6D3 
02FB 
A316 
A54F 
A587 
A5BA 
A3DD 
A628 
A655 
A67B 
A691 
A6AE 
A6C2 
A4E8 
B872 
BEF2 
055D 
0011 
00B4 
A44B 
A475 
A487 
0570 
A455 
A483 
A47D 
A459 
A463 
A46B 
A46F 
A45B 
A447 
A48B 
02FC 
B7D8 
AF99 
B249 
B7E6 
00 IE 
OOOC 
A3 17 
A310 
A4BD 
A4DA 
B784 
0676 
B865 
A359 
B580 
BOFD 
B563 
B664 
B605 
B632 
B725 
B75C 
OOCC 


PILOT 


H. B. STEWART 


DEQTI 

B665 

DFA010 

B697 

DFALSE 

B695 

DGETI 

DGTTI 

B673 

DIGIT 

0551 

DIN 

B 1 1 1 

D I 0003 

D I 0005 

B 121 

DI0010 

B10C 

DIVERR 

0084 

DLETI 

DLOADA 

B69E 

DLTTI 

B67C 

DMODI 

B633 

DMOVI 

DMU010 

B5AC 

DMU020 

B5C 1 

DMU090 

B5CC 

DMULI 

DNAME 

B09C- 

DNEGI 

B63F 

DNETI 

B66C 

DNSIZE 

D0P005 

B0E6 

D0P007 

B0F7 

D0P010 

B IOC 

DOPEN 

DOSVEC 

OOOA 

DOUT 

B1 16 

DP 

00C2 

DRAW 

DSCMI 

B570 

DSPFLG 

02FE 

DSTORA 

B6A3 

DSUBI 

DSUBIX 

B591 

DTAB 

0080 

DTRUE 

B69 1 

EBOTOM 

ELEFT 

0008 

ELEVEL 

0002 

ENDERR 

0081 

EOL 

EOPERR 

0081 

EPUTC 

E406 

ERIGHT 

0004 

ESTKP 

ESTKSZ 

OOOE 

ETOP 

0001 

EXC010 

A2AC 

EXC015 

EXC020 

A2C 1 

EXC030 

A2DE 

EXC040 

A2E2 

EXC050 

EXC070 

A2FE 

EXC900 

A30F 

EXCMND 

A2AA 

EXEC 

EXECF 

OOFE 

EXP 

B892 

EXP030 

B899 

EXP080 

EXP 192 

B8C5 

EXP 194 

B8C7 

EXPERR 

0002 

EXPRC 

EXPSTK 

0093 

EXPVAL 

B8CA 

EXV010 

B8DE 

EXV020 

EXV030 

B8FF 

EXV040 

B908 

FILDAT 

02FD 

FILERR 

FILL 

0012 

FNAME 

B09F 

FND010 

B228 

FND090 

FNDIOB 

B226 

FNM010 

B0A1 

FNM020 

BOB 1 

GACC 

0CL090 

BA99 

GCLEAR 

BA9A 

GCM090 

AC3F 

GCM100 

GCM200 

AC 53 

GCM220 

AC6D 

GCM240 

AC85 

GCM300 

GCM390 

AC9A 

GCOMND 

AC 19 

GDRW 

BAOA 

GDRWTO 

GEC010 

A226 

GEC020 

A240 

GEC100 

A24A 

GEC200 

GEC210 

A299 

GEC220 

A29F 

GEC250 

A2A2 

GETC 

GETCOM 

A21D 

GETLIN 

AF9E 

GETR 

0005 

GEX050 

GEX090 

BA99 

GEXIT 

BA5D 

GFIL 

BA06 

GFILTO 

GGO 

BAOE 

GG0005 

BA10 

GG0090 

BA59 

GGOTO 

GGT005 

B9C7 

GG TO 10 

B9D8 

GGT090 

B9F3 

GJUMP 

GMOVE 

BAA7 

GMV010 

BAAB 

GMV01 1 

BAD7 

GMV012 

GMV013 

BB08 

GMV014 

BB11 

GMV015 

BB IB 

GMV020 

GMV025 

BB34 

GMV030 

BB6 1 

GMV040 

BB6F 

GMV045 

GMV10B 

BAD4 

GMV120 

BBAO 

GMV150 

BBBF 

GMV157 

GMVOVF 

BB05 

GNUMB 

00F4 

GPEN 

BA4B 

GP 1010 

GPINIT 

BEB9 

GPN090 

BA59 

GPN099 

BA5A 

GRD080 

GRD090 

BCC7 

GREAD 

BCA7 

GRFLAG 

0554 

GSMODE 

GS0020 

B052 

GS0090 

B071 

GS0100 

B077 

GSOPEN 

GTAB 

A3D1 

GTEMP 

00D2 

GTEMP2 

00D6 

GTL010 

GTL020 

AFC5 

GTLNNO 

B854 

GTR090 

BA59 

GTRN 

GTRNTO 

B9F4 

GTT090 

B9F3 

GX 

OOEC 

GX1 

GX2 

00C4 

GXNEW 

00E6 

GY 

OOEF 

GY 1 

GY2 

00C7 

GYNEW 

00E9 

ICAUX1 

034A 

ICAUX2 

ICBAH 

0345 

ICBAL 

0344 

ICBLH 

0349 

ICBLL 

ICCOM 

0342 

ICCOMZ 

0022 

ICDNO 

0341 

ICHID 

IC0050 

E358 

IC0090 

B373 

ICOMP 

B334 

ICRLH 

ICRLL 

0346 

ICSTA 

0343 

IFI020 

B312 

IF 1080 

IF 1090 

B333 

I FIND 

B2FE 

ILENG 

B3A9 

IMATCH 

IMPERR 

0002 

IMT010 

B37C 

IMT090 

B392 

INI01Q 

INI015 

A049 

INIT 

AOOO 

INLN 

0080 

INSERR 

INTO 10 

BBF8 

INT012 

BC05 

INT019 

BC08 

INT020 

INT022 

BC21 

INT030 

BC26 

INT039 

BC32 

INT040 

INTERR 

008C 

INTEST 

BBDD 

INVFLG 

02B6 

IOCBO 

I0CB1 

0010 

I0CB2 

0020 

I0CB3 

0030 

I0CB4 

I0CB7 

0070 

IOCBSZ 

0010 

I0E010 

AF7F 

IOEDIS 

IOERCK 

AF7B 

IOERR 

0086 

IOHAND 

B 1 73 

IOSTAT 

IOVBAS 

E400 

IVCERR 

0002 

JNKERR 

0002 

LDELET 

LE 

OOEO 

LFTSTG 

A9A9 

LINENO 

OODC 

LINLNG 

LINSRT 

A 1 F2 

LISTER 

AE30 

LMARGN 

0052 

LNOERR 

LOADFG 

0572 

LP 

OOBA 

LPENH 

0234 

LPENV 


B683 
B1 19 
B68A 
B3CF 
B5A2 
OOOF 
B0B7 
0011 
B590 
0002 
009B 

0091 
A2B9 
A2FA 

0092 
B8C2 
B896 
B8EE 
0096 
B236 
OOCE 
AC42 
AC8D 
B9C 1 
A254 
0007 
BA7F 
B9BD 
B9C5 
0505 
BAF3 
BB28 
BB75 
BBD7 
BEC2 
BCC5 
06F 1 
AFD5 
AFB8 
BA36 
OOBE 
00C1 
034B 
0348 
0340 
0347 
B331 
B374 
AOOB 
0089 
BC09 
BC33 
0000 
0040 
0500 
00E4 
A206 
007A 
008D 
0235 


PILOT 


H B STEWART 


LS OODE 

LSENO 

0005 

LVAUTO 

A1 59 

MAKSTO 

MALI 00 B469 

MAL200 B494 

MAL300 

B4A1 

MALLOC 

MATCHF OOFD 

MATCHX 

0573 

MATSTG 

A9AE 

MAXLN 

MBC OODA 

MDA10C 

► B4E 1 

MDEALL 

B4A4 

MDP 

MEMA OOD2 

MEMB 

OOD4 

MEMHI 

02E5 

MEMLO 

MESO BFOO 

MES1 

BF5B 

MES10 

BFA7 

MESH 

MES12 BF61 

MES13 

BFBA 

MES14 

BF61 

MES15 

MES16 BF6 1 

MES17 

BF61 

MES18 

BF61 

MES19 

MES2 BF 61 

MES20 

BF61 

MES21 

BF61 

MES22 

MES23 BFD5 

MES24 

BFDO 

MES3 

BF6E 

MES4 

MES5 BF89 

MES6 

BF8E 

MES7 

BF5B 

MES8 

MES9 BF9F 

MESSOT 

BF 1 2 

MESTAB 

BF43 

MFDEL 

ML E A078 

MLLOAD 

A09F 

ML0030 

AOCO 

ML0080 

ML0082 A0E4 

ML0085 

A0E6 

ML0089 

A0E9 

ML0100 

ML0110 A0F9 

ML0112 

AOFC 

ML0140 

A 1 2E 

ML0150 

ML0155 A13B 

ML0160 

A148 

ML0200 

A 169 

ML0900 

ML0945 A19B 

ML0947 

A 1 9F 

ML0950 

A1 AB 

ML0960 

ML0963 A1C4 

ML0981 

A 1 D9 

ML0982 

A1E7 

ML0985 

ML0990 A1EF 

MLOOP 

A0A7 

MLRES 

A07E 

M0D019 

MOD020 BC65 

M0D025 

BC6F 

M0D030 

BC8D 

M0D090 

M0D360 BC41 

MOVDA 

B530 

MOV I A 

B50C 

MP 

MSEND OOOB 

MS0010 

BF20 

MS0020 

BF2F 

MS0090 

MSP 00D6 

MTSIZ 

0018 

MVD010 

B546 

MVD020 

MVD090 B55C 

MV I 010 

B51 5 

MV I 020 

B520 

MVI030 

MV I 090 B52F 

NEWCUR 

BC37 

NEWLIN 

B860 

NMN090 

NMN900 AF1C 

NMN990 

AF1E 

NOCLR 

0020 

NP 

NRCERR 0083 

NS 

0080 

NSTERR 

0002 

NULACC 

NULL 0001 

NUM 

0002 

NUMBER 

00B8 

NUMNAM 

NUMNUM AEDA 

NVAR 

0004 

NWC010 

BC39 

NXTIOB 

NXTLN 0084 

OLDCOL 

005B 

OLDROW 

00 5A 

OLLERR 

OPEN 0003 

OPNBUF 

0560 

□PR 

0040 

OPTAB 

OREAD 0004 

OWRIT 

0008 

PACTL 

D302 

PADDLO 

PCTAB A40D 

PCUP 

0004 

PEN 

0553 

PENPOS 

PFD010 AB24 

PFD020 

AB29 

PFD090 

AB36 

PKYRND 

PMOVE B3C5 

POINT 

00B6 

PP 

OOCE 

PRS010 

PRS080 B 170 

PRTSFD 

AB IF 

PRTSTG 

B 1 53 

PSETUP 

PSF B809 

PSF010 

B822 

PSTOP 

A16C 

PTEN 

PTENL OOOA 

PTRIGO 

027C 

PUP 

A168 

PUTC 

PUTR 0009 

QDI V 

BE3C 

QDV003 

BE55 

QDV006 

QD VO 10 BE61 

QDV090 

BE7C 

QDV093 

BE83 

GDV096 

QDV099 BE8E 

QML010 

BDDB 

QML015 

BDFA 

QML020 

QML022 BE04 

QML030 

BEOA 

GML040 

BE2D 

GML090 

GMULT BDD 9 

ONEGA 

BE 8F 

RADDI 

BEA9 

RDVOOO 

RDV010 B259 

RDV090 

B249 

RDYMES 

BF33 

RDYTXT 

REMDEV B254 

RESIT 

ABEF 

RITSTG 

A9B4 

RMARGN 

ROWCRS 0054 

RSEND 

001 1 

RSUBI 

BEBO 

RTCLOK 

RUN OOFF 

S1H 

OOBO 

S1L 

OOAE 

S2H 

S2L 00B2 

SAV010 

ABC9 

SAV080 

AEE2 

SAV090 

SAV100 ABES 

SAV190 

ABEC 

SAVIT 

AEAO 

SAVYR 

SB 0080 

SCD270 

B 1 EC 

SCD290 

B1F2 

SCD300 

SCD310 BIFF 

SCD900 

B225 

SCEOA 

B7B9 

SCL005 

SCNDEV B1B7 

SCNEOL 

B802 

SCNERR 

0085 

SCNLBL. 

SCNMOD 0007 

SCOMP 

B2F8 

SDEL2 

B2A4 

SDELET 

SDL090 B2B7 

SEN090 

B39C 

SEND 

B39D 

SETCUR 

SETPGL B792 

SETSVL 

B79B 

SF I 080 

B29E 

SFIND 

SFN090 B18D 

SFN100 

B18E 

SFN200 

B 1 96 

SFN220 

SFN250 B1AF 

SFNAME 

B17E 

SGETC 

E414 

SIGNON 

SIN020 B2C0 

SIN090 

B2F7 

SINSRT 

B2B8 

SINTAB 

SINVAL BCC8 

SJUMP 

0508 

SKCTL 

D20F 

SKPSEP 

SKS090 B7F8 

SKSTAT 

D20F 

SLB 

B7FA 

SM0010 


A987 
B427 
270F 
00D8 
02E7 
BFAE 
BF61 
BF61 
BFC2 
BF7D 
BF99 
00E2 
A0D3 
AOEE 
A 1 34 
A16C 
A1B2 
A1E9 
BC64 
BC95 
00C6 
BF32 
B551 
B527 
AF1B 
OOBE 
B82F 
A20C 
B242 
OOOF 
A3B7 
0270 
0022 
D20A 
B 163 
B3B7 
B770 
OOOB 
BE5E 
BE8C 
BE02 
BE3B 
B24A 
0001 
0053 
0012 
00B4 
ABE4 
0552 
B1F3 
B7CB 
B7C 1 
B29F 
BC96 
B281 
B 1 AO 
0017 
BD2C 
B7EE 
B3EF 



PILOT 


H. B. STEWART 


SM0090 

B402 

SMOVI 

B3DA 

SNV010 

BCD9 

SNV020 

BCE9 

SNV040 

BCFD 

SNV100 

BD09 

SNV120 

BD17 

SNV150 

BD21 

SNV900 

BD29 

SNXTI 

B410 

SOP 

B91B 

S0P050 

B93B 

SP 

OOCA 

SPARES 

OOOE 

SPLIT 

0010 

SPUTC 

E416 

SSKCTL 

0232 

SSPEC 

E41 A 

STAB 

A9A9 

STICKO 

0278 

STMLST 

B792 

STRIGO 

0284 

SVAR 

0008 

SYCMND 

A2A6 

TABLEN 

00D5 

TADDI 

BDC5 

TCOL 

0028 

TELN 

008C 

TEMP 

00A1 

TEMP2 

00A7 

TEX005 

B94A 

TEX010 

B95B 

TEX020 

E972 

TEX 100 

B979 

TEX210 

B981 

TEX220 

B986 

TEX300 

E998 

TEX400 

B9A2 

TEX480 

B9BA 

TEXBUF 

0577 

TEXLNG 

OOFE 

TEXP 

B943 

TEXT 

0020 

THETA 

00F2 

TIN 

B 130 

TMU005 

BD95 

TMU008 

BD9B 

TMU010 

BD9D 

TMU020 

BDB8 

TMU090 

BDC4 

TMULT 

BD83 

T0N010 

BECA 

TDN020 

BEDF 

TQN090 

BEF 1 

TONES 

BEC8 

TOUT 

B13C 

TRACE 

0575 

TRAILB 

B9A8 

TRCMES 

0018 

TROW 

0018 

TXTCOL 

0291 

UNDERR 

OOOA 

USESTK 

050B 

USOERR 

008B 

USTKP 

0090 

USTKSZ 

0010 

USVAR 

0010 

VARTAB 

051B 

WARMST 

0008 

XAC003 

A7EE 

XAC009 

A7FB 

XAC020 

A7FC 

XAC022 

A814 

XAC023 

A81E 

XAC024 

A840 

XAC025 

A84A 

XAC026 

A852 

XAC027 

A860 

X AC 028 

A867 

XAC030 

A875 

X AC 031 

A87A 

X AC 100 

A889 

XAC1 10 

A88B 

XAC120 

A89B 

XAC190 

A8B 1 

XAC23B 

A836 

XACCPT 

A7E3 

XAU090 

AED9 

XAUTO 

AEC 1 

XC 

0050 

XCA090 

ADA1 

XCALL 

AAOC 

XCASS 

AD91 

XCL080 

AA1F 

XCL090 

AA21 

XCL100 

AA22 

XCM092 

AB48 

XCM100 

AB4B 

XCM120 

AB79 

XCM200 

AB7E 

XCM300 

AB91 

XCM900 

AB9F 

XCMPUT 

AB37 

XCS010 

ADAD 

XCS020 

ADB5 

XCS080 

ADBD 

XCS090 

ADBF 

XCSYNC 

ADA2 

XDN090 

AD6C 

XDONE 

AD5C 

XDOS 

A7B8 

XDS090 

A7AA 

XDU005 

AADF 

XDU020 

AAF7 

XDU040 

AB04 

XDU080 

ABM 

XDU090 

AAD4 

XDUMP 

AAD5 

XEN090 

A7A8 

XEN095 

A7AB 

XEND 

A792 

XGR020 

ACOA 

XGRAPH 

ABFE 

XIN 

ACDE 

XIN030 

ADOC 

XIN035 

ADI A 

XIN040 

AD21 

XIN080 

ACDB 

XIN090 

ACDD 

XJM010 

AAAE 

XJM030 

AAB5 

XJM040 

AABA 

XJM043 

AACA 

XJM045 

AACD 

XJM050 

AAD2 

XJM090 

AAD4 

X JMP 

AA48 

XJMPM 

AAA7 

XJP005 

AA4D 

XJP030 

AA65 

XJP040 

AA77 

XJP060 

AA9A 

XJP200 

AAA2 

X JUMP 

0502 

XLD050 

AE1F 

XLD090 

AE01 

XLIST 

AE26 

XLOAD 

AE05 

XLS009 

AE2F 

XLS029 

AE53 

XLS180 

AE6E 

XLS200 

AE74 

XLS230 

AE7E 

XLS235 

AE82 

XLS240 

AE90 

XLS250 

AEB 1 

XLS260 

AEB9 

XLS900 

AEBE 

XLS990 

AECO 

XMA009 

A8BE 

XMA010 

A8BF 

XMA050 

A8E3 

XMA060 

A8EF 

XMA100 

A8F5 

XMA120 

A8FF 

XMA140 

A919 

XMA160 

A929 

XMA200 

A938 

XMA300 

A93E 

XMA400 

A948 

XMATCH 

A8B6 

XMS080 

A982 

XMS090 

A986 

XMWSP 

A95 1 

XNE090 

A9F5 

XNEW 

A9F8 

XNEWV 

A9BA 

XNU010 

AF32 

XNU080 

AF58 

XNU090 

AF5F 

XNU190 

AF60 

XNV008 

A9CD 

XNV010 

A9CE 

XNV020 

A9E5 

XNV080 

A9EE 

XNV090 

A9F5 

X0T005 

AD3A 

X0T010 

AD45 

X0T020 

AD52 

X0T090 

AD5B 

XOUT 

AD29 

XP0020 

A776 

XP0090 

A78E 

XP0900 

A78F 

XPOS 

A760 

XREM 

A75D 

XREN 

AF1F 

XRN090 

A7E2 

XRUN 

A7C0 

XSAVE 

ADD4 

XSD020 

ACA6 

XSD023 

ACBB 

XSD027 

ACBF 

XSD030 

ACCF 

XSD085 

ACDB 

XSD090 

ACDD 

X SOUND 

AC9B 

XSV050 

ADFC 

XSV090 

AE02 

XTEMP 

OOAB 

XTP010 

A6F 1 

XTP020 

A6F8 

XTP022 

A700 

XTP025 

A70C 

XTP030 

A70F 

XTP035 

A71B 

XTP040 

A72C 

XTP050 

A738 

XTP080 

A74A 

XTP090 

A74E 

XTP400 

A75D 

XTR090 

ADD3 

XTRACE 

ADCO 

XTYPE 

A6DC 

XTYPE2 

A74F 

XTYPE3 

A757 

XUS090 

AA41 

XUS100 

AA44 

XUSE 

AA25 

XWAIT 

AD6D 

XWT010 

AD78 

XWT020 

AD82 

XWT090 

ZNV010 

AD6C 

B83F 

XXXX 

OOFS 

YC 

0030 

ZERVAR 

B83B